0

这是设置:

我有一个绑定到可观察对象的文本框。

可观察对象在文本框的更改事件上从文本框中获取值,而该更改事件又发生在模糊(或我们不考虑的少数其他事件,例如“valueUpdate:afterkeydown”)。

我需要的是让它在点击 Enter 时也发生,也就是说,通过点击 Enter,文本框的当前值被获取并推送到 observable。

所以我写了一个绑定,它监听文本框的 keydown 事件,如果扫描码是 13,它确实.. 什么?这是我不确定的地方。让我解释:

此时我需要更改事件以某种方式发生,但我无法直接控制它,因为我无法明确触发元素上的更改事件。所以我所做的是模糊并重新关注文本框,导致更改事件自然发生。这种模糊/聚焦的东西有效,但会引入难以抑制的不良副作用。

所以我最终要寻找的是一种开始将当前值从文本框传播到我的“输入”绑定内部的可观察对象的方法。这是为了有效地模拟失去焦点但不失去焦点(做模糊)时发生的变化事件。

4

2 回答 2

1

尝试这个。

ko.bindingHandlers.returnKey = {
   init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
      ko.utils.registerEventHandler(element, 'keydown', function(evt) {
        if (evt.keyCode === 13) {
           //evt.preventDefault();
           //evt.target.blur();
           valueAccessor(element.value);
        }
      });
    }
};

那么你的html应该

<input type="text" data-bind="value:message, returnKey:message" />

检查演示

于 2012-10-25T16:11:01.590 回答
1

似乎您应该直接更新值绑定而不是可观察值。

ko.bindingHandlers.value.update(element, valueAccessor, allBindingsAccessor);

那应该做你想要的。

于 2012-10-25T21:31:51.470 回答