knockout.js 返回true不允许在Knockout“事件”绑定中执行默认操作

hmtdttj4  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(141)

根据“事件”绑定的Knockout文档:
默认情况下,Knockout将阻止事件执行任何默认操作。
....
但是,如果您 * 确实 * 想让默认操作继续执行,只需从事件处理函数返回true。
这似乎对我不起作用。我的观点是:

  1. <input data-bind="event: { 'keydown': function(d, e) { onInputKeydown(e); } }" />

和我的ViewModel中的事件处理程序:

  1. onInputKeydown = function(e) {
  2. console.log(e.which);
  3. return true;
  4. }

这个处理程序阻止任何字符输入到<input>元素中。我做错了什么?

rqcrx0a6

rqcrx0a61#

ViewModel中的函数确实返回了true,但是您在视图中指定的 Package 器没有传播该函数的返回值。尝试以下操作(注意添加了return):

  1. <input data-bind="event: { 'keydown': function(d, e) { return onInputKeydown(e); } }" />
gmxoilav

gmxoilav2#

我认为问题出在您如何绑定函数。请尝试以下操作:

  1. <input data-bind="event: { keydown: onInputKeydown }" />

Knockout会将参数数据和事件传递给您的函数。

  1. onInputKeydown = function(data, event) {
  2. console.log(event.which);
  3. return true;
  4. }
rks48beu

rks48beu3#

是的,你需要从你的函数中返回true。我还发现,如果我在函数中遇到断点,keydown事件似乎忽略了我已经返回了true。禁用所有断点,它就能正常工作。

相关问题