簡體   English   中英

是否有JavaScript“選擇框顯示”事件或類似的東西? (使用jQuery)

[英]Is there a JavaScript “select box reveal” event or something like it? (using jQuery)

我有一個HTML選擇:

<select>
    <option>Choose one</option>
</select>

使用jQuery,當我顯示選擇選項列表時,是否有可以捕獲的事件? (我需要這個的原因是因為我想推遲列表的填充,直到需要向用戶顯示列表的那一刻)。

mousedown在點擊它時起作用,但如果它們選中它並按回車鍵則不會做任何事情。

focus也適用於點擊,幾乎適用於標簽,但它會立即觸發標簽,而不是等到按Enter鍵顯示選項列表。 (這是一個問題,因為如果他們選中它然后選項卡而不按Enter鍵,我不希望事件觸發)。

我甚至想出了這個可憎的事:

var select_reveal = function(ev) { ... }
$('select').on('mousedown', select_reveal).on('keydown', function(ev) {
    // character code 9 is tab
    if (ev.which !== 9) select_reveal.bind(this)(ev);
});

這實際上似乎有效 它甚至適用於鍵入字母的情況(它填充列表然后跳轉到以該字母開頭的第一個選項)。 但正如我所說,這有點令人厭惡。 只是檢查“tab”作為例外也有點hacky - 肯定有其他例外不會導致select被揭示。

是否有一個簡單的事件涵蓋了這個用例(或者至少包含它的一些不那么可惡的事件)?

(注意:我知道有類似的結構系統可供選擇 - 例如,通過提前填充選項而不是選擇顯示;但我不是在尋找替代建議,只是想知道是否存在是明確提出的問題的解決方案)。

我不確定你打算支持哪些瀏覽器,但是在你走得太遠之前請注意,如果你改變選擇列表的內容(例如添加/更改/刪除選項)IE將實際吞下(鼠標點擊)或焦點)將打開列表並讓用戶關閉選擇列表的事件。 詳情請見: http//webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html

我想如果你真的覺得延遲加載會有好處...我會在初始加載時隱藏/禁用選擇列表,並在渲染后觸發選項的異步加載...重新啟用/在准備就緒時顯示選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM