Knockout.js 退出键在击倒JS中不起作用 预期结果:
当在键入[name]值时按下“escape键”时,它应返回到以前的值 实际结果: 即使按下“退出键”,值也保持不变Knockout.js 退出键在击倒JS中不起作用 预期结果:,knockout.js,binding,keypress,Knockout.js,Binding,Keypress,当在键入[name]值时按下“escape键”时,它应返回到以前的值 实际结果: 即使按下“退出键”,值也保持不变 jsiddle您希望ctrl-z键行为附加到escape键作为escape键,而不是为撤消按时所做的更改而构建的 为了实现这一点,我们可以使用keydown事件,因为keypress不会检测到退出键 查看: <input type="text" data-bind="value: name" /> <input id="test" type="text" da
jsiddle您希望
ctrl-z
键行为附加到escape
键作为escape键,而不是为撤消按时所做的更改而构建的
为了实现这一点,我们可以使用keydown
事件,因为keypress
不会检测到退出键
查看:
<input type="text" data-bind="value: name" />
<input id="test" type="text" data-bind="value: name,event:{keydown :escKey}" />
<pre data-bind="text:ko.toJSON($data,null,2)"></pre>
工作样本
或者,您可以使用BiningHandler
来实现类似的功能,但将其作为最后手段。谢谢超级酷:)
根据super cool的回答,我创建了一个自定义绑定处理程序来解决这个问题。嗯,这是一样的,但对我来说,如果要在bindingHandler中执行,则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());
这是jsfiddle非常好,非常感谢。但是我认为我应该尝试在代码的基础上创建一个自定义bindingHandler,因为我不希望我的viewmodel直接访问“#test”元素。谢谢:)
ko.bindingHandlers.cancelOnEscape = {
init: function (element, accessor) {
var _accessor = accessor();
$(element).keydown(function (event) {
if (event && event.keyCode == 27) {
$(element).val(_accessor());
}
return true;
});
}
};