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では動作しますが、クロムでは矢印キーで2つの変更を開始します

4

1 に答える 1

0

キーを使用して値を変更するときに、changeイベントとイベントの両方を発生させています。イベントがイベントをトリガーするため、そのイベントは要素の元の変更から 1回、および のトリガーから 1 回、2 回発生します。イベント。keyupselectkeyupchangeselectchangekeyup

2 回発生するのを避けるために、イベントoriginalEventなどをチェックすることができますが、簡単な解決策は、同じことを 2 回実行しないのに十分な長さのフラグを使用することです。

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 に答える