如何获取输入以在更改时调用KO绑定函数?

时间:2014-02-28 18:19:20

标签: javascript knockout.js

我有一个input元素,我想在searchQueryChanged更改时调用我的函数searchQuery

<input placeholder="Search…" type="text" name="q" data-bind="value: searchQuery, event: {change:searchQueryChanged}" autocomplete="off" />  

在我的视图模型中,这里是searchQuerysearchQueryChanged

searchQuery = ko.observable('');

searchQueryChanged = function() {
    ....do some stuff....
},

但是,当我输入input时,我的函数不会被调用。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果要注册自己的订阅以通知可观察对象的更改,可以调用其订阅功能。例如,

searchQuery.subscribe(function(newValue) {
    alert("The search query is " + newValue);
});

JSFIDDLE 添加了工作示例

答案 1 :(得分:1)

您说在键入文本框时没有调用任何内容。我相信,对于更改事件,您必须将焦点从文本框中移开以进行更改以及调用您的函数。如果你打算在你输入的那个文本框中调用searchQueryChanged函数,你可以尝试这个,这会在每次按键后调用searchQueryChanged ---

<input placeholder="Search…" type="text" name="q" data-bind="value: searchQuery, valueUpdate: 'keyup', event: { keyup: searchQueryChanged}" autocomplete="off" />

答案 2 :(得分:0)

听起来好像你想要在输入内容时立即触发该功能。如果是这种情况,那么您将缺少以下属性:

valueUpdate:'afterkeydown'

如此处所述:http://knockoutjs.com/documentation/value-binding.html

实施例: HTML

<input placeholder="Search…" type="text" name="q" data-bind="value: searchQuery, valueUpdate: 'afterkeydown'" autocomplete="off" />

JS 订阅更改的一种方法是订阅observable:

searchQuery.subscribe(searchQueryChanged);

function searchQueryChanged(value) {
    //value is the latest value that triggered the change
    ....do some stuff....
}

每次用户按键时都会触发更改事件。

这是你应该做的方式Knockout反对依赖变化事件。