【问题标题】:Returning true doesn't allow default action in Knockout "event" binding返回 true 不允许在 Knockout“事件”绑定中执行默认操作
【发布时间】:2015-06-11 02:31:42
【问题描述】:
根据Knockout docs for the "event" binding:
默认情况下,Knockout 会阻止事件采取任何默认操作。
....
但是,如果您确实想让默认操作继续进行,只需从事件处理函数返回 true。
这似乎对我不起作用。这是我的看法:
<input data-bind="event: { 'keydown': function(d, e) { onInputKeydown(e); } }" />
以及我的 ViewModel 中的事件处理程序:
onInputKeydown = function(e) {
console.log(e.which);
return true;
}
此处理程序阻止将任何字符输入到<input> 元素中。我做错了什么?
【问题讨论】:
标签:
javascript
knockout.js
data-binding
keydown
【解决方案1】:
您的 ViewModel 中的函数确实返回 true,但您在视图中指定的包装器并未传播该函数的返回值。试试这个(注意添加return):
<input data-bind="event: { 'keydown': function(d, e) { return onInputKeydown(e); } }" />
【解决方案2】:
我认为问题在于如何绑定函数。请尝试以下方法:
<input data-bind="event: { keydown: onInputKeydown }" />
Knockout 会将参数数据和事件传递给您的函数。
onInputKeydown = function(data, event) {
console.log(event.which);
return true;
}
【解决方案3】:
是的,您确实需要从您的函数中返回 true。我还发现,如果我在函数中遇到断点,keydown 事件似乎会忽略我返回的 true。禁用所有断点,它工作正常。