2015-03-02 76 views
0

我正在使用twitter typeahead和knockout,並且我注意到在從typeaheads建議中選擇時,在chrome/explorer中輸入綁定的observable不會更新。爲了更新它,你必須在你選擇了其中一個建議之後進行擊鍵(如空格)。輸入/忽略輸入是不夠的(但在Firefox中工作)。Twitter typeahead,KnockoutJS沒有在Chrome/Explorer中觸發onchange/update observable

請通過以下方式撥弄鉻/探險VS Firefox的測試:

http://jsfiddle.net/s415L158/5/

var viewModel = { 
    city:ko.observable() 
} 

var cities = new Bloodhound({ 
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), 
queryTokenizer: Bloodhound.tokenizers.whitespace, 
local: $.map(["Stockholm","Oslo","Copenhagen"], function(city) { return { value: city }; }) 
}); 
cities.initialize(); 

$('#typeahead').typeahead({ 
hint: true, 
highlight: true, 
minLength: 1 
}, 
{ 
name: 'cities', 
displayKey: 'value', 
source: cities.ttAdapter() 
}); 

ko.applyBindings(viewModel); 

任何想法如何解決這一問題?

更新:

重現:

  1. 開始輸入從建議輸入
  2. 選擇 '斯德哥爾摩' 'S'
  3. 無焦點的輸入可觀察到沒有更新

回答

0

我有這個工作補充說,更新上的建議選擇變量自定義事件,如下所示:

$('#typeahead').typeahead({ 
hint: true, 
highlight: true, 
minLength: 1 
}, 
{ 
name: 'cities', 
displayKey: 'value', 
source: cities.ttAdapter() 
}).on('typeahead:selected', function(event, selection){ 
viewModel.city(selection.value); 
}); 
+2

同樣工作,如果你不希望與預輸入插件手動觸發'change'事件纏住你的視圖模型的邏輯: '.on('typeahead:selected',function(e,sel){$(this).change(); });' – Tyblitz 2015-03-02 23:10:27