【问题标题】:Call function on input change with knockout.js (valueUpdate)使用 knockout.js (valueUpdate) 在输入更改时调用函数
【发布时间】:2015-10-01 22:10:19
【问题描述】:

我正在尝试在我的输入值更新时调用一个函数。 该函数将验证输入值并将标志设置为 true 或 false,该标志将用于 DOM 中的多个元素。

我一直在尝试建议的解决方案here

<input data-bind="event: { change: value_changed }, value: saved_value, valueUpdate: 'afterkeydown'" />

但它似乎不适用于 afterKeyDown。如您在此处看到的,它仅在 unfocus 上调用该函数: http://jsfiddle.net/imac/hY5T2/142/

我做错了什么?

【问题讨论】:

  • 试试这个 jsfiddle.net/hY5T2/145 。欢呼
  • valueUpdate 仅在按下键时更新可观察对象(如您的代码中指定的那样)。您可以尝试订阅 observable 并在那里检查必要的逻辑。
  • 虽然你的 observable 在afterkeydown 之后更新,但change 的工作方式不同,只有在失去焦点时才会触发。

标签: knockout.js knockout-3.0 knockout-3.2


【解决方案1】:

这是您JSFiddle 的更新

<input data-bind="value: demo, valueUpdate: 'afterkeydown'" />


var viewModel = function () {
    var self = this;

    self.demo = ko.observable('');
    self.myFunction = function(){
        alert("fired");
    }
}

var VM = new viewModel();
ko.applyBindings(VM);

VM.demo.subscribe(function(){
    VM.myFunction();
});

我希望这是你想要的??

谢谢

编辑:

没有订阅者。 JSFiddle without subscriber

var viewModel = function () {

    var self = this;

    self.demo = ko.observable('');

    self.myFunction = function () {
        alert("fired");
    }

    self.worker = ko.computed(function () {
        if (self.demo()) self.myFunction();
    }, this);
}

var VM = new viewModel();
ko.applyBindings(VM);

【讨论】:

  • 不使用订阅者就没有别的办法了吗?
  • @alvaro 你也可以使用customBindingHandlers,但那是在其他日子不需要过于复杂的事情subscribe 是最好的方法。
  • 谢谢。我将订阅者放在模型中以使其更简单。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 2015-04-19
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多