簡體   English   中英

jQuery .change()事件不會從鍵盤上的選擇列表中觸發:如何覆蓋它?

[英]jQuery .change() event doesn't fire on select list from keyboard: how can I override this?

jQuery .change()事件不會在用戶第二次鍵入時觸發,並按Enter鍵以選擇項目。 它第一次開火。

請參閱: http//jsfiddle.net/CtXbU/

如果您專注於列表並鍵入AD並按Enter鍵,則[編輯]將觸發警報。 但是,如果您輸入AG並按Enter,則不會發生任何事情。 單擊遠離列表時,僅會彈出警報。

如果我想處理用戶使用鼠標和鍵盤更改列表,我該怎么辦?

我知道我可以使用.keypress()來處理鍵盤事件,但是讓兩個獨立的代碼段做同樣的事情感覺很奇怪。

有沒有一個jQuery事件可以在它們發生時立即處理鼠標和鍵盤的變化?

謝謝!

**更新**

這可能會澄清我的問題: http//jsfiddle.net/Bybr2/2/

// How can I create an event (or handler) that 
// (a) fires AS SOON AS keypress is invoked from user keyboard input
// (b) also fires AS SOON AS change is invoked from user mouse input
// (c) does not fire a second time when change is invoked after keypress, when the user clicks away following keypress?

按鍵后的change可能非常混亂 - 只有當用戶按下Enter或點擊時才會發生,所以如果我進行客戶端更改,那么用戶可能會非常驚訝!

我能想到的唯一解決方案是某種變量,如user_has_just_done_keypress ,在user_has_just_done_keypress上設置為true ,然后在下一次change事件時重置為false ,但感覺非常混亂。 它如果你有一個同樣是行不通的change從鼠標的前change從用戶並重訂。 哎呀!

keyup事件添加處理程序,而不是按鍵! 如果你使用與keypress相同的處理程序和更改,它在Firefox中不能很好地工作。

$("select").bind('change keyup', select_handler);

和處理程序

function select_handler() {
    $(this).val();
};

更改功能將觸發鍵盤輸入:

  • 谷歌瀏覽器21.0.1180.89米
  • Internet Explorer 9.9.8112.16421

但不適用於Firefox 10.0.7(所有在Windows 7 Professional,SP1上)

添加:

$('select').keypress(function() {
  $(this).change();
});

到$(document).ready-function解決了,如果對我來說,沒有打破其他瀏覽器。

更改事件仍將僅觸發一次(盡管來自按鍵處理程序中的強制更改事件)。

您可以添加keypress並讓兩個函數調用另一個函數來執行您的實際操作。 這樣復制就不那么糟了。 實際上,回車鍵在firefox中觸發事件

這就是.change()適用於文本輸入的方式。 您必須專注於更改才能生效。 這也記錄在http://api.jquery.com/change/

change()Api文檔讀取

...當用戶使用鼠標進行選擇時,會立即觸發事件,但對於其他元素類型,事件將延遲,直到元素失去焦點。

更新您可以將按鍵和更改組合在一個實時功能中,如下所示

$('div').live({
  'change': function() {},
  'keypress': function() {}
})

我在使用IE之前已經看過這個(所有版本,我認為)。 只有輸入失去焦點時才會觸發鍵盤更改事件; 綁定到多個事件是使處理程序像您期望的那樣工作的唯一方法。 您可以通過將處理程序定義為全局函數來殺死一些冗余,然后將其設置為多個事件的處理程序:

function change_handler()
{
    // ...stuff...
}

$(document).ready(function() {
    $('input.whatever').bind('change keypress other_event ...', change_handler);
});

不像我想的那樣干凈,但它並沒有那么糟糕,而且它有效。

希望這可以幫助!

暫無
暫無

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

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