2012-08-16 142 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()不是跨浏览器!