2011-05-24 25 views
1

這與Fire event each time a DropDownList item is selected with jQueryHow 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. 
}); 

我想也檢查了「」按鍵'事件,但無濟於事。有任何想法嗎?

回答

0

你想'keydown'。按鍵事件不會捕獲像箭頭這樣的控制功能。

+0

好的想法,但它似乎也沒有做到(只是試圖迴應你的建議)。另外,我非常確定,如果在任何你會得到'keydown'的環境中,你還會得到我已經在尋找的(並正在使用Firefox)的'keyup'事件。 – 2011-05-24 22:32:40

+0

好吧,我只是通過我自己的測試。看起來功能正在交給操作系統控制,而操作系統正在將其從瀏覽器的控制中移除。這實際上是有道理的......但它對你沒有多大幫助。我想你可能不得不旋轉自己的下拉菜單,或者使用其他預製件之一,比如這個來自填充的:https://github.com/fnagel/jquery-ui/wiki/Selectmenu – 2011-05-24 22:40:15

+0

謝謝,我一定會拿看看那個。至少,這裏的代碼可能會顯示你如何解決這個問題。 – 2011-05-24 22:48:04