1

我已經實現了在這裏找到的jQuery UI自動完成組合框組件:https://jqueryui.com/autocomplete/#comboboxjQueryUI自動選擇組合框事件沒有觸發

自動完成正在工作,並且當從結果值中單擊項目時,「select」事件正在成功觸發。使用鍵盤滾動並選擇一個項目也會觸發「選擇」事件。

不幸的是,我一直沒有成功獲得其他事件,比如「change」,「close」和「search」來觸發,這意味着如果一個有效值是「foo」,並且用戶只需鍵入「foo」而不點擊結果,基礎值沒有被設置。如果用戶選擇了「欄」,然後清除搜索文本 - 底層的值仍然是「欄」,情況也是如此。

查看API文檔,「更改」事件被認爲是附加到「autocompletechange」事件,但綁定到該事件也沒有效果。

$('#my-select').combobox({ 
    change: function(event, ui){ 
     // does not fire 
     console.log('change', event, ui, $(this).val()); 
    }, 
    close: function(event, ui){ 
     // does not fire 
     console.log('close', event, ui, $(this).val()); 
    }, 
    search: function(event, ui){ 
     // does not fire 
     console.log('search', event, ui, $(this).val()); 
    }, 
    select: function(event, ui){ 
     // this will fire when a menu item is clicked 
     console.log('select', event, ui, $(this).val()); 
    } 
}); 

$('#my-select').on('autocompletechange', function(event, ui){ 
    // does not fire 
    console.log('autocompletechange', event, ui, $(this).val()); 
}); 

看看它是不是在此的jsfiddle工作:https://jsfiddle.net/s56n2pzz/

我注意到,事件發射了「改變」事件有「comboboxselect」一typeoriginalEvent.type是「autocompleteselect」,然而結合像「comboboxchange」似乎也不起作用。

回答

0

在查看更多出現的「comboboxselect」事件而不是「autocompleteselect」後,我能夠找出問題。創建組合框的jQuery.widget代碼包裝自動完成,從而包裝事件。仔細檢查示例代碼後,我可以看到當觸發「autocompleteselect」事件時,它觸發父組合框上的「select」事件 - 傳遞原始事件。

實現了「autocompletechange」方法,但它不會觸發父級上的更改事件,只會檢查輸入是否有效,並且如果不是該值,則不會清除值...似乎是示例中的錯誤?

從在問題鏈接的例子:

this._on(this.input, { 
    // "select" is fired on the combobox 
    autocompleteselect: function(event, ui) { 
     ui.item.option.selected = true; 
     this._trigger("select", event, { 
      item: ui.item.option 
     }); 
    }, 

    // change is NOT fired on the combobox 
    autocompletechange: "_removeIfInvalid" 
});