我有一个input
元素,我想在searchQueryChanged
更改时调用我的函数searchQuery
:
<input placeholder="Search…" type="text" name="q" data-bind="value: searchQuery, event: {change:searchQueryChanged}" autocomplete="off" />
在我的视图模型中,这里是searchQuery
和searchQueryChanged
:
searchQuery = ko.observable('');
searchQueryChanged = function() {
....do some stuff....
},
但是,当我输入input
时,我的函数不会被调用。有什么想法吗?
答案 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反对依赖变化事件。