0

私がやろうとしているのは、フォーカスが別の特定の要素 (別の SELECT) に移された場合に、要素 (SELECT) がいつフォーカスを失うかをテストすることです。フォーカスが失われ、2 つのうちの 1 つにないときに何かをトリガーしたい。

問題は、他の選択にフォーカスがある場合に (blur イベントで) フォーカスを失ったときに最初の選択でテストすることですが、DOM はまだ更新されていません。

これが私がしたことの例です:

$select1.on("blur", function() {
    if($select2.is(":focus"))
    {
         // do something
    }
    else
    {
        // do something else
    }
});

$select1 と $select2 は、要素を含む 2 つの変数にすぎません。要素がフォーカスを取得すると、JQueryが識別子「:focus」を追加することを読みましたが、私が行った方法では機能しません。

いずれの場合も、else の「do something else」に入ります。

4

2 に答える 2

2

イベントの順序については Matt の言うとおりですが、もう少しクリエイティブになることもできます。

たとえば、 setTimeout を使用してぼかしのチェックを遅らせると、フォーカスがすでに発射されていることがわかります。単純。

$select1.on("blur", function() {
  window.setTimeout(function() {
    if($select2.is(":focus"))
    {
       // do something
    }
    else
    {
      // do something else
    }
  },100);
});

それを試してみてください。

于 2012-04-04T16:40:26.820 に答える
1

blurイベントは、新しい要素の が発生する前に明確に発生するため、できることは、一方のイベントで変数を設定し、もう一方のイベントでそれを検出することだけです。focus

$select1.on('blur', function (e) {
    var $that = $(this);

    setTimeout(function () {
        if (($that.data('focussed') || 0) > e.timeStamp - 5) {
            // Do something
        } else {
            // Something else
        }
    }, 1);
}); 

$select2.on('focus', function (e) {
    $select1.data('focussed', e.timeStamp);
});

ここで動作することを確認してください。http://jsfiddle.net/uZAMm/

于 2012-04-04T16:29:11.413 に答える