1

私がこれをするとしましょう:

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() { // do other stuff }
});

これは、すべてのテキスト入力フィールドのデフォルトの動作です。私が今やりたいことは、このようなことです

<button id='shinyButton' name='shinyButton'>Poke Me</button>

それから:

$('shinyButton').addEvent('click', function() {
  stopDefaultBlurFunctionInCurrentlyFocussedField();
  // do seriously cool stuff
  if (finishedDoingSeriouslyCoolStuff) {
    $('field').focus();  // return focus to input field
  }
}

それで:

1) DefaultBlurFunctionInCurrentlyFocussedField(); を停止するにはどうすればよいですか?

2) DoingSeriouslyCoolStuff が実際に終了したかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

0

blur厳密に言えば、クリック ハンドラーが発生する前にイベントが発生するため、やりたいことができません。

マウスオーバーでイベントを無効にするという Dimitar の提案は、マウス ユーザーには問題なく機能しますが、ユーザーがキーボードでボタンをトリガーすることはできません。

1 つのオプション (ただし、少しハック) は、blurイベント ハンドラーに小さな遅延を導入し、変数フラグを使用してイベントの発生を制御することです (遅延を調整して、知覚できないようにする必要がありますが、それでも目的には十分な長さです)。 :

var disableBlurMethod = false;

$('field').addEvents ({
  'focus' : function() { // do some stuff }
  'blur' : function() {
    (function() {
      if (!disableBlurMethod) {
        // do some stuff
      }
    }).delay(50);
  }
});

$('shinyButton').addEvent('click', function() {
  disableBlurMethod = true;
  // do seriously cool stuff
  if (finishedDoingSeriouslyCoolStuff) {
    disableBlurMethod = false;
    $('field').focus();  // return focus to input field
  }
}
于 2012-02-22T15:21:40.473 に答える