【问题标题】:Unexpected behaviour with KnockoutJS Keypress event on input输入时出现 KnockoutJS Keypress 事件的意外行为
【发布时间】:2015-05-13 16:50:33
【问题描述】:

我在搜索类型的输入上有一个事件绑定,这是为了在服务器端触发搜索并在用户键入时填充列表。

那部分很好,我已经使用纯javascript建立了一个骨架示例,当需要集成到淘汰赛中时,我遇到了一个奇怪的问题。

我的 HTML 中有标准绑定:

<input data-bind="event:{keypress:ring}" type="text" />

对于这个例子,我的铃声功能会在按键被按下时简单地记录一些东西:

ring: function (event) {
            this.triggered(this.triggered() + 1);
            var msg = "Keypress binding called " + this.triggered() + " time(s).";
                    console.log(msg);
                } 

这都是正常的,没问题..

问题是输入值/字符串没有被更新。它只是保持空白,就像我没有按下任何东西一样。

我很好奇我是否错过了我应该做的某种默认转发?这是预期的行为吗?对我来说似乎有点奇怪。

这里有一个工作示例:JSfiddle

当您输入输入时,除了我的 ring 函数之外什么都没有发生。

【问题讨论】:

  • 你试过什么?你能对你的问题做一个简化的 JSFiddle 吗?您需要使用 KnockOut 吗?可能重复?

标签: javascript html knockout.js data-binding


【解决方案1】:

您需要从事件处理函数返回 true 以允许对输入执行默认操作。

在这里演示:http://jsfiddle.net/szcuyq13/1/

    ring: function (event) {
        this.triggered(this.triggered() + 1);
        var msg = "Keypress binding called " + this.triggered() + " time(s).";
        console.log(msg);
        return true;
    } 

换句话说,这正是您所猜测的:您只需要添加一点点即可确保“默认转发”按预期进行。默认情况下,KO 会阻止绑定事件处理程序中的默认操作,并且通过返回 true 来请求完成该默认操作。此处在标题注 3 下对其进行了描述:

http://knockoutjs.com/documentation/event-binding.html

该注释还解释了 KO 这样做的原因,当您想到锚点和点击时,这是有道理的。

【讨论】:

  • 非常感谢!就是这样!
猜你喜欢
  • 2021-09-28
  • 2022-08-05
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多