Javascript 仅在Firefox中,当我单击任意位置时,我的twitter typeahead搜索输入被清除

Javascript 仅在Firefox中,当我单击任意位置时,我的twitter typeahead搜索输入被清除,javascript,firefox,knockout.js,twitter-typeahead,Javascript,Firefox,Knockout.js,Twitter Typeahead,问题: 仅在Firefox中,我在typeahead输入中输入一个值后,该值设置正确。当我单击屏幕上的任何其他位置(包括Firefox窗口之外)时,该值将被清除。即使我将alt tab键从窗口移开,该值也会重置 应该注意的是,我也在使用knockout 这是我的html: <input placeholder="Search for a lodge..." data-bind="typeahead: selectedLodgeID, value: selectedLodgeText, su

问题: 仅在Firefox中,我在typeahead输入中输入一个值后,该值设置正确。当我单击屏幕上的任何其他位置(包括Firefox窗口之外)时,该值将被清除。即使我将alt tab键从窗口移开,该值也会重置

应该注意的是,我也在使用knockout

这是我的html:

<input placeholder="Search for a lodge..." data-bind="typeahead: selectedLodgeID, value: selectedLodgeText, suggestions: lodgeList, suggestionsText: 'Name', suggestionsValue: 'ID'" />
以下是其他相关js:

window.DashboardViewModel = function (startupLodge) {
    var self = this;
    self.selectedLodgeID = ko.observable();
    self.selectedLodgeText = ko.observable();

    self.selectedLodgeID.subscribe(function (newValue) {
        if (newValue) {
            SetLodgeText(newValue);  
    });
    var SetLodgeText = function (lodgeID) {
        for (var index = 0; index < self.lodgeList().length; ++index) {
            var lodge = self.lodgeList()[index];
            if (lodge.ID == lodgeID) {
                self.selectedLodgeText(lodge.Name);
            }
        }
    };
}
window.DashboardViewModel=函数(startupLodge){
var self=这个;
self.selectedLodgeID=ko.observable();
self.selectedLodgeText=ko.observable();
self.selectedLodgeID.subscribe(函数(newValue)){
如果(新值){
SetLodgeText(newValue);
});
var SetLodgeText=函数(lodgeID){
对于(var index=0;index
正如我前面提到的,我不能在Chrome或IE中复制这个,只能在Firefox中复制。如果我在selectedLodgeID.subscribe()的开头放置一个断点,它将命中多次,尽管这是因为当我单击“继续”时在第一个断点之后,它相当于单击任意位置,如前所述,这将导致输入清除


提前感谢您的帮助。

请尝试
valueUpdate:“keyup”
在用户释放enter键后立即更新视图模型

<input placeholder="Search for a lodge..." data-bind="typeahead: selectedLodgeID, value: selectedLodgeText, valueUpdate : 'keyup', suggestions: lodgeList, suggestionsText: 'Name', suggestionsValue: 'ID'" />


您正在执行
valueAllowUnset
吗?您有一个更改触发器,它会清除值,除非
valueAllowUnset
。更改通常在模糊时触发,当您在元素外部单击时会发生这种情况。@RoyJ计算出来--在Chrome和IE中更改我输入的值(以显示文本值)不触发on change事件,但是,在Firefox中,通过jquery更改该值确实会导致触发onchange事件。由于元素上有
绑定,因此不需要使用jquery来更改该值,只需更改可观察值即可。一旦有了viewmodel条目来控制DOM元素,即使在bin中也是如此丁·汉德勒,使用视图模型。@RoyJ我说错了。当我说“通过jquery”时,我的意思是“通过我的视图模型”。无论如何,这个问题似乎已经基本解决了。@user8675309提供的答案对你有用吗?
<input placeholder="Search for a lodge..." data-bind="typeahead: selectedLodgeID, value: selectedLodgeText, valueUpdate : 'keyup', suggestions: lodgeList, suggestionsText: 'Name', suggestionsValue: 'ID'" />