Knockout.js 全局键下/键上检测

Knockout.js 全局键下/键上检测,knockout.js,Knockout.js,在我的knockout应用程序中,我希望能够全局检测onkeyup/onkeydown事件,并在发生这种情况时运行testMethod。到目前为止,我尝试的是自定义bindinghandler ko.bindingHandlers.returnKey={ init:函数(元素、valueAccessor、allBindingsAccessor、viewModel){ ko.utils.registerEventHandler(元素'keydown',函数(evt){ 如果(evt.keyCod

在我的knockout应用程序中,我希望能够全局检测onkeyup/onkeydown事件,并在发生这种情况时运行
testMethod
。到目前为止,我尝试的是自定义bindinghandler

ko.bindingHandlers.returnKey={
init:函数(元素、valueAccessor、allBindingsAccessor、viewModel){
ko.utils.registerEventHandler(元素'keydown',函数(evt){
如果(evt.keyCode===13){
evt.preventDefault();
evt.target.blur();
valueAccessor().调用(viewModel);
}
});
}

}; 您没有指定需要支持哪些浏览器,但可以考虑使用它(支持的>= IE9)。这里有一个跳过淘汰的版本,因为您希望以全局方式(在身体上)进行淘汰:

var-vm={
obs1:ko.可观察(“我的文本”),
obs2:ko.可观察(“我的文本”),
obs3:ko.可观察(假)
};
函数testMethod(eventArgs){
console.log(eventArgs.keyCode);
if(eventArgs.keyCode==13){
eventArgs.preventDefault();
}
}
document.body.addEventListener('keydown',testMethod,true);
ko.应用绑定(vm)

测试abc


< /代码> 您没有指定需要支持哪些浏览器,但您可以考虑使用它来支持(支持的>= IE9)。这里有一个跳过淘汰的版本,因为您希望以全局方式(在身体上)进行淘汰:

var-vm={
obs1:ko.可观察(“我的文本”),
obs2:ko.可观察(“我的文本”),
obs3:ko.可观察(假)
};
函数testMethod(eventArgs){
console.log(eventArgs.keyCode);
if(eventArgs.keyCode==13){
eventArgs.preventDefault();
}
}
document.body.addEventListener('keydown',testMethod,true);
ko.应用绑定(vm)

测试abc


在任何要捕获事件的区域上使用事件绑定。关键事件只会发生在能够获得焦点的元素(输入、按钮等)上,当焦点在这些元素上时。(如果您也使用
addEventListener
,则这是正确的。)


演示:

在要捕获事件的任何区域上使用事件绑定。关键事件只会发生在能够获得焦点的元素(输入、按钮等)上,当焦点在这些元素上时。(如果您也使用
addEventListener
,则这是正确的。)


演示:

主体上
标记好这是不可能的(IMO)。keyup和keydown事件适用于实际键入内容的输入元素。cheerson
body
tag well这是不可能的(IMO)。keyup和keydown事件适用于实际键入内容的输入元素。干杯
<div data-bind="event:{keydown:testMethod}">
testMethod: function (element, eventArgs) {
    vm.pressCount(vm.pressCount() + 1);
    var prevent = eventArgs.keyCode === 13;
    return !prevent;
}