Escape 键在 Knockout JS 中不起作用
Escape key is not working in Knockout JS
<input type="text" data-bind="value: name" />
预期结果:
在为 [name] 键入值时按下 "escape key" 时,它应该 return 到其先前的值。
实际结果:
即使我按下 "escape key"
值也保持不变
jsfiddle here
您期望 ctrl-z
键行为附加到 escape
键,因为转义键不是为了撤消您在按下时所做的更改而构建的。
要实现这一点,我们可以使用 keydown
事件,因为 keypress
不会检测转义键。
查看:
<input id="test" type="text" data-bind="value: name,event:{keydown :escKey}" />
<pre data-bind="text:ko.toJSON($data,null,2)"></pre>
viewModel:
var model = function(){
var self=this;
self.name= ko.observable("smith");
self.escKey= function (data, event) {
if (event && event.keyCode == 27) {
$('#test').val(data.name());
}
return true;
}
};
ko.applyBindings(new model());
工作样本here
或者,您可以使用 biningHandlers
来实现类似的功能,但将其作为最后的手段。
感谢超级酷:)
根据 super cool 的回答,我创建了一个自定义绑定处理程序来解决这个问题。好吧,它是一样的,但对我来说,如果你打算在 bindingHandler 中执行它,你的视图模型会更干净。
ko.bindingHandlers.cancelOnEscape = {
init: function (element, accessor) {
var _accessor = accessor();
$(element).keydown(function (event) {
if (event && event.keyCode == 27) {
$(element).val(_accessor());
}
return true;
});
}
};
这是 jsfiddle http://jsfiddle.net/6h1bbLm9/4/
<input type="text" data-bind="value: name" />
预期结果:
在为 [name] 键入值时按下 "escape key" 时,它应该 return 到其先前的值。
实际结果:
即使我按下 "escape key"
值也保持不变jsfiddle here
您期望 ctrl-z
键行为附加到 escape
键,因为转义键不是为了撤消您在按下时所做的更改而构建的。
要实现这一点,我们可以使用 keydown
事件,因为 keypress
不会检测转义键。
查看:
<input id="test" type="text" data-bind="value: name,event:{keydown :escKey}" />
<pre data-bind="text:ko.toJSON($data,null,2)"></pre>
viewModel:
var model = function(){
var self=this;
self.name= ko.observable("smith");
self.escKey= function (data, event) {
if (event && event.keyCode == 27) {
$('#test').val(data.name());
}
return true;
}
};
ko.applyBindings(new model());
工作样本here
或者,您可以使用 biningHandlers
来实现类似的功能,但将其作为最后的手段。
感谢超级酷:)
根据 super cool 的回答,我创建了一个自定义绑定处理程序来解决这个问题。好吧,它是一样的,但对我来说,如果你打算在 bindingHandler 中执行它,你的视图模型会更干净。
ko.bindingHandlers.cancelOnEscape = {
init: function (element, accessor) {
var _accessor = accessor();
$(element).keydown(function (event) {
if (event && event.keyCode == 27) {
$(element).val(_accessor());
}
return true;
});
}
};
这是 jsfiddle http://jsfiddle.net/6h1bbLm9/4/