2012-08-16 110 views
1

在選擇元素(組合)中,更改事件在元素失去焦點時執行,當使用箭頭鍵更改組合時,可以執行更改事件嗎?使用箭頭鍵在選擇元素中更改事件

我試着活在所有的混合體:

$('select').live('keyup',function(e) { 
    if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.keyCode) != -1) 
    {     
     ///obj.blur(); 
     obj.change(); 
     ///obj.focus();  
    } 
}); 

與Firefox的作​​品,但在鉻推出兩款箭頭鍵改變

回答

0

你射擊兩個change事件和keyup事件中使用時,要更改select值的鍵以及自從keyup事件觸發change事件以來,該事件將被觸發兩次,一次是從select元素的原始更改以及change在中觸發的一次事件。

爲了避免射擊兩次,你可以檢查該事件originalEvent或類似的東西,但最簡單的辦法是隻使用停留在濫竽充數長不執行同樣的東西兩次標誌:

var flag=true; 

$('select').on({ 
    keyup: function(e){ 
     flag=false; 
     if ([33, 34, 35, 36, 37, 38, 39, 40].indexOf(e.which) !=-1) $(this).trigger('change'); 
     setTimeout(function() {flag=true}, 200); 
    }, 
    change: function(e) { 
     if (flag) { 
      //do stuff here 
     } 
    } 
}); 

請注意,Array.indexOf()不是跨瀏覽器!