這與Fire event each time a DropDownList item is selected with jQuery和How to fire an dropdownlist event instantaneously?有關,但那裏的答案並沒有給出我所需要的。立即發射dropdownlist事件(理想的jQuery)
給定一個帶有jQuery + JavaScript的HTML下拉選擇,並允許鼠標或鍵盤交互,我想編寫一個動作不僅會觸發最終選擇(「更改」事件),而且會觸發用戶使用鍵盤向上箭頭或向下箭頭更改選擇,而不使用回車鍵確認選擇。特別是,在下拉菜單中選擇顏色時,當用戶通過選項向上或向下箭頭時,我想不斷更改色板的顏色。
以下代碼部分基於Fire event each time a DropDownList item is selected with jQuery的討論,但當使用鍵盤進行選擇時,「獲勝」版本不起作用,並且它在Google Chrome瀏覽器&上非常完整的失敗。我的代碼在Firefox的所有最新版本中都能正常工作,並且在Chrome和Safari中適用於基於鼠標的操作;然而,在Chrome中,當用戶使用鍵盤工作時,我似乎能夠捕捉的唯一事件是「更改」;對於Safari來說,它是值得的。
(function($) {
$.fn.dropdownSelect = function(fn) {
return this.each(function() {
// I'd expect this to be the normal case for selecting with mouse, but only seems to work in Firefox.
$('option', this).click(function() {
fn();
});
// Selection via arrow keys. Only seems to work in Firefox.
$(this).keyup(function() {
fn();
});
// Next case is crucial for Safari and Chrome, should be harmless for Firefox.
$(this).change(function() {
fn();
});
});
}
})(jQuery);
然後我調用它喜歡:
$('#color-dropdown').dropdownSelect(function() {
// Act on it here.
});
我想也檢查了「」按鍵'事件,但無濟於事。有任何想法嗎?
好的想法,但它似乎也沒有做到(只是試圖迴應你的建議)。另外,我非常確定,如果在任何你會得到'keydown'的環境中,你還會得到我已經在尋找的(並正在使用Firefox)的'keyup'事件。 – 2011-05-24 22:32:40
好吧,我只是通過我自己的測試。看起來功能正在交給操作系統控制,而操作系統正在將其從瀏覽器的控制中移除。這實際上是有道理的......但它對你沒有多大幫助。我想你可能不得不旋轉自己的下拉菜單,或者使用其他預製件之一,比如這個來自填充的:https://github.com/fnagel/jquery-ui/wiki/Selectmenu – 2011-05-24 22:40:15
謝謝,我一定會拿看看那個。至少,這裏的代碼可能會顯示你如何解決這個問題。 – 2011-05-24 22:48:04