2014-02-28 19 views
0

我有,我想打電話給我的功能的input元素searchQueryChanged每當searchQuery變化:如何獲得一個輸入來調用KO綁定函數的變化?

<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,我的功能沒有被調用。有任何想法嗎?

回答

1

你說當你輸入到文本框中沒有被調用。我相信,通過更改事件,您必須將焦點從文本框中移至更改爲激活並調用您的函數。如果這是你的意圖有一個名爲因爲你是在文本框中鍵入searchQueryChanged功能,你可以試試這個,每一個按鍵後,它將調用searchQueryChanged ---

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

試過這個,還是不叫。 – tnw

+0

這可能過於明顯,但是viewmodel被成功綁定,他們是否在頁面上的行爲與預期的其他敲除元素?沒有其他JS錯誤可能導致這種情況下崩潰? – Gadget27

+1

@tnw它應該運作良好。小提琴示例:http://jsfiddle.net/X5eys/。你也可以使用'keypress'而不是'keyup'。 –

1

如果您想註冊自己的訂閱以通知觀察對象的更改,可以調用他們的訂閱功能。例如,

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

JSFIDDLE用工作實例添加

+0

我也試過這個,仍然沒有被調用。 – tnw

+0

已添加工作示例 –

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 一訂閱變更的方式僅僅是訂閱可觀察的:

searchQuery.subscribe(searchQueryChanged); 

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

每當用戶按下某個鍵時,都會觸發更改事件。

這就是你應該這樣做的方式淘汰賽反對依靠變化事件。

相關問題