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 工作,但在 chromium 中使用箭头键启动两个更改

4

1 回答 1

0

当使用键更改值时,您同时触发了change事件和事件,并且由于事件触发了事件,因此该事件被触发两次,一次来自元素的原始更改,一次来自触发事件。keyupselectkeyupchangeselectchangekeyup

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

于 2012-08-16T19:21:05.227 回答