针对使keydownNSEvent在Swift中运行一次这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NET中的KeyDown和KeyPress有什么区别?、@HostListenerke
针对使 keydown NSEvent 在 Swift 中运行一次这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NET 中的 KeyDown 和 KeyPress 有什么区别?、@HostListener keydown 事件不会在 Ionic angular 的整个页面上触发、ajax 请求中不允许的方法(keydown 事件仅在调试时激活)、angularJS文本框根据输入字符(文本框值)进行查询ng-keydown ng-keyup等相关知识,希望可以帮助到你。
本文目录一览:- 使 keydown NSEvent 在 Swift 中运行一次
- .NET 中的 KeyDown 和 KeyPress 有什么区别?
- @HostListener keydown 事件不会在 Ionic angular 的整个页面上触发
- ajax 请求中不允许的方法(keydown 事件仅在调试时激活)
- angularJS文本框根据输入字符(文本框值)进行查询ng-keydown ng-keyup
使 keydown NSEvent 在 Swift 中运行一次
如何解决使 keydown NSEvent 在 Swift 中运行一次
NSEvent keydown 代码在按下键时重复运行。如何确保事件只运行一次然后停止侦听直到发生 key up 事件?
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown,handler: doSomething(event:))
}
func doSomething(event: NSEvent) -> NSEvent{
// 36 is key code for ENTER key
if event.keyCode == 36{
print("Hello World!")
}
return event
}
解决方法
您可以使用 isARepeat
属性简单地检查 NSEvent
是否重复:
func doSomething(event: NSEvent) -> NSEvent {
if event.keyCode == 36,!event.isARepeat {
print("Hello World!")
}
return event
}
如果您只是想摆脱按键声音,您需要将返回类型更改为可选并返回 nil:
func doSomething(event: NSEvent) -> NSEvent? {
guard !event.isARepeat else {
// this will suppress the key sound if you return nil and not propagate the key down event
return nil
}
if event.keyCode == 36 {
print("Hello World!")
// if you want to suppress the key sound when is not a repeat just return nil here as well
return nil
}
return event
}
.NET 中的 KeyDown 和 KeyPress 有什么区别?
KeyDown
.NET 中的和KeyPress
事件有什么区别?
答案1
小编典典显然对这个 有很多 误解!
KeyDown
和之间唯一实际的区别KeyPress
是它KeyPress
传递由按键产生的字符,并且仅在有一个字符时才被调用。
换句话说,如果您按下A
键盘,您将获得以下事件序列:
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A,修饰符=Keys.None
- KeyPress:KeyChar=’a’
- KeyUp:KeyCode=Keys.A
但是如果你按Shift
+ A
,你会得到:
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyUp:KeyCode=Keys.A
- KeyUp:KeyCode=Keys.ShiftKey
如果你按住键一会儿,你会得到类似的东西:
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyDown:KeyCode=Keys.A,KeyData=Keys.A | Keys.Shift,修饰符=Keys.Shift
- KeyPress:KeyChar=’A’
- KeyUp:KeyCode=Keys.A
- KeyUp:KeyCode=Keys.ShiftKey
请注意,正如许多其他答案所说,KeyPress
发生 在 and 之间 KeyDown
,KeyUp
而 不是
之后,当没有生成字符时不会调用它,并且在按住键时会重复,这也与许多其他答案相反.KeyUp``KeyPress``KeyDown
不 直接导致调用的键示例KeyPress
:
- Shift, Ctrl, Alt
- F1 through F12
- 方向键
确实会 导致调用的键示例KeyPress
:
A
通过Z
,0
通过9
等Spacebar
Tab
(KeyChar=’\t’, ASCII 9)Enter
(KeyChar=’\r’, ASCII 13)Esc
(KeyChar=’\x1b’, ASCII 27)Backspace
(KeyChar=’\b’, ASCII 8)
对于好奇的人,KeyDown
大致与WM_KEYDOWN
、和相关。 可以 调用少于键重复的次数,但它发送一个重复计数,IIRC,WinForms
使用该计数每次重复生成一个 KeyDown。KeyPress``WM_CHAR``KeyUp``WM_KEYUP``WM_KEYDOWN
__
@HostListener keydown 事件不会在 Ionic angular 的整个页面上触发
如何解决@HostListener keydown 事件不会在 Ionic angular 的整个页面上触发?
我想为我的整个应用程序捕获 keydown 事件(特别是使用箭头键导航)
这适用于任何子组件,但菜单、根或标题级别的内容不起作用。所以用户必须点击进入组件,然后按下一个键。
我想从我的整个应用程序中捕获按键
将以下内容添加到我的主 app.component 中根本不会触发
@HostListener(''keydown'',[''$event''])
handleKeyboardEventkeydown(event: KeyboardEvent) {
console.log(''keydown AppComponent:'',event.key) // never logs
}
在我的 home.component(路由器指向的地方)和我的实际管理内部页面的子组件中的代码相同。只有在最后一个事件才会触发,但不会在应用程序或家庭组件中触发
我的应用组件 html 是
<ion-app>
<ion-menu contentId="main-content" type="overlay">
<ion-header>
<ion-toolbar>
<ion-title>Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-menu-toggle auto-hide="false" *ngFor="let p of appPages">
<ion-item [routerDirection]="''root''" [routerLink]="[p.url]">
<ion-icon slot="start" [name]="p.icon"></ion-icon>
<ion-label> {{ p.title }} </ion-label>
</ion-item>
</ion-menu-toggle>
</ion-list>
</ion-content>
</ion-menu>
<ion-router-outlet id="main-content"></ion-router-outlet>
</ion-app>
如何在 app.component 上获取我的 HostListener 以捕获按键。或者我可以如何/在其他地方完成这项工作?
解决方法
将您的主机侦听器代码更改为以下内容:
@HostListener( ''window:keydown'',[ ''$event'' ] )
handleKeyboardEventkeydown(event: KeyboardEvent) {
// ...
}
注意 window:keydown
而不是 keydown
。
ajax 请求中不允许的方法(keydown 事件仅在调试时激活)
如何解决ajax 请求中不允许的方法(keydown 事件仅在调试时激活)?
我有一个关于 AJAX 请求的非常奇怪的问题。
服务器app.py
#### app.py
from flask import Flask,request,render_template
app = Flask(__name__)
app.debug = True
@app.route("/myajax",methods=[''GET'',''POST''])
def mypostajaxreq():
print(request.form)
if request.method == "POST":
name = request.form["name"]
return " Hello " + name
else:
return "Just Hello"
@app.route("/")
def index():
return render_template("indexlistener.html")
if __name__ == "__main__":
app.run()
indexlistener.html
<!DOCTYPE html>
<html>
<head>
<title>Practice AJAX</title>
<script type="text/javascript" src = "/static/js/myajaxrequestlistener.js"></script>
</head>
<body>
<form method="post">
<label>Name:<input type="text" id="name" value="" /></label>
<button type="button" id="btn-post">Click</button>
<div id="result"></div>
</form>
</body>
</html>
myajaxrequestlistener.js
文件
function do_ajax ()
{
var req = new XMLHttpRequest();
var result = document.getElementById(''result'');
req.onreadystatechange = function()
{
if(this.readyState == 4 && this.status == 200) {
result.innerHTML = this.responseText;
}
}
req.open(''POST'',''/myajax'',true);
req.setRequestHeader(''content-type'',''application/x-www-form-urlencoded;charset=UTF-8'');
req.send("name=" + document.getElementById(''name'').value);
};
document.addEventListener(''DOMContentLoaded'',function()
{
document.getElementById("btn-post").addEventListener("click",function()
{
do_ajax();
})
})
document.addEventListener(''DOMContentLoaded'',function()
{
document.addEventListener("keydown",function(event)
{
if(event.key === "Enter")
{
do_ajax();
}
})
})
当我单击按钮时,这一切正常,正如预期的那样,它会在 python 代码中触发 mypostajaxreq
,但是当我按下 Enter
时,它返回 Error 405. Method not allowed
。我不清楚为什么会发生这种情况,我检查了调试器,并将侦听器事件输入到 keydown
,事实上,更奇怪的是,代码在我使用调试器时有效,但在我按下时却不起作用Enter
直接。我怀疑这是由于听众造成的,但我不明白为什么它不应该起作用。此外,我不明白我收到的错误 (405
) 的逻辑:据我所知,只有当服务器端的路由不接受调用请求方法时才会发生这种情况,但在这里我接受两者,此外我只从网页发出 POST 请求。我是网络编程新手,提前致谢。
解决方法
在表单中唯一的文本框中按 Enter 将提交表单,向 /
发送一个 POST,这是该路由不允许的方法。
您可以将提交处理程序附加到表单而不是 keydown
此外,您不必使用多个 DOMContentLoaded
事件处理程序。
document.addEventListener(''DOMContentLoaded'',function()
{
document.querySelector(''form'').addEventListener("submit",function(event)
{
event.preventDefault();
do_ajax();
});
document.getElementById("btn-post").addEventListener("click",do_ajax);
});
angularJS文本框根据输入字符(文本框值)进行查询ng-keydown ng-keyup
html:<input type="text" ng-model="employee.account" ng-keydown />
js:
/*directives*/ angular.module('activitiModeler').directive('ngKeydown',function() { return { restrict: 'A',link: function(scope,elem,attrs) { //var functionToCall = scope.$eval(attrs.ngKeydown); elem.on('keydown',function(e){ alert(e+','+e.which); }); } }; });
/*directives*/ angular.module('activitiModeler').directive('ngKeydown',attrs) { //var functionToCall = scope.$eval(attrs.ngKeydown); elem.on('keyup',function(e){ alert(scope.employee.account); }); } }; });
关于使 keydown NSEvent 在 Swift 中运行一次的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.NET 中的 KeyDown 和 KeyPress 有什么区别?、@HostListener keydown 事件不会在 Ionic angular 的整个页面上触发、ajax 请求中不允许的方法(keydown 事件仅在调试时激活)、angularJS文本框根据输入字符(文本框值)进行查询ng-keydown ng-keyup的相关知识,请在本站寻找。
本文标签: