返回 true 不允许 Knockout "event" 绑定中的默认操作
Returning true doesn't allow default action in Knockout "event" binding
根据 Knockout docs for the "event" binding:
By default, Knockout will prevent the event from taking any default action.
....
However, if you do want to let the default action proceed, just return true from your event handler function.
这似乎对我不起作用。这是我的观点:
<input data-bind="event: { 'keydown': function(d, e) { onInputKeydown(e); } }" />
以及我的 ViewModel 中的事件处理程序:
onInputKeydown = function(e) {
console.log(e.which);
return true;
}
此处理程序阻止将任何字符输入到 <input>
元素中。我做错了什么?
您的 ViewModel 中的函数确实 return 为真,但您在视图中指定的包装器并未传播该函数的 return 值。试试这个(注意添加 return
):
<input data-bind="event: { 'keydown': function(d, e) { return onInputKeydown(e); } }" />
是的,您的函数确实需要 return 为真。我还发现,如果我在我的函数中遇到断点,keydown 事件似乎会忽略我已经 returned 为真。禁用所有断点,它工作正常。
我认为问题在于您如何绑定函数。请改为尝试以下操作:
<input data-bind="event: { keydown: onInputKeydown }" />
Knockout 会将参数数据和事件传递给您的函数。
onInputKeydown = function(data, event) {
console.log(event.which);
return true;
}
根据 Knockout docs for the "event" binding:
By default, Knockout will prevent the event from taking any default action.
....
However, if you do want to let the default action proceed, just return true from your event handler function.
这似乎对我不起作用。这是我的观点:
<input data-bind="event: { 'keydown': function(d, e) { onInputKeydown(e); } }" />
以及我的 ViewModel 中的事件处理程序:
onInputKeydown = function(e) {
console.log(e.which);
return true;
}
此处理程序阻止将任何字符输入到 <input>
元素中。我做错了什么?
您的 ViewModel 中的函数确实 return 为真,但您在视图中指定的包装器并未传播该函数的 return 值。试试这个(注意添加 return
):
<input data-bind="event: { 'keydown': function(d, e) { return onInputKeydown(e); } }" />
是的,您的函数确实需要 return 为真。我还发现,如果我在我的函数中遇到断点,keydown 事件似乎会忽略我已经 returned 为真。禁用所有断点,它工作正常。
我认为问题在于您如何绑定函数。请改为尝试以下操作:
<input data-bind="event: { keydown: onInputKeydown }" />
Knockout 会将参数数据和事件传递给您的函数。
onInputKeydown = function(data, event) {
console.log(event.which);
return true;
}