【问题标题】: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;
}

此处理程序阻止将任何字符输入到&lt;input&gt; 元素中。我做错了什么?

【问题讨论】:

    标签: 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。禁用所有断点,它工作正常。

        【讨论】:

          猜你喜欢
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多