使用选定元素中的箭头键更改事件

时间:2012-08-16 19:02:00

标签: jquery html

在select元素(组合)中,当元素失去焦点时执行change事件,是否可以在使用箭头键进行组合更改时执行change事件?

我尝试在所有组合中使用:

$('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工作,但在chrome中使用箭头键启动了两次更改

1 个答案:

答案 0 :(得分:0)

当您使用密钥更改change值时,您同时触发了keyup事件和select事件,并且由于keyup事件触发了change事件1}}事件,该事件被触发两次,一次来自select元素的原始更改,一次触发change事件中的keyup

为了避免触发它两次,你可以检查事件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()不是跨浏览器!