-2

現在、テーブルを使用した管理ツールに取り組んでいます。フィールドをクリックすると、編集可能になります。しかし、複数の選択ボックスまたはテキスト フィールドがあるいくつかのフィールドがあります。問題は、1 つの選択ボックスまたはテキスト フィールドがぼやけたときにハンドラーが呼び出されることです。

目的のオブジェクトにフォーカスがあるかどうかを確認しようとしましたが、新しい要素がフォーカスされる前にぼかしイベントが発生するようです。

例を提供するには:

私の HTML コードは次のようになります。

<form>
<select id="edit">
<!-- Options... -->
</select>
<select id="edit2">
<!-- Options... -->
</select>
</form>

そして、これは私のjsの一部です:

$(document).on("blur", "select.edit", finishEdit);
$(document).on("blur", "select.edit2", finishEdit);

// Some later point in the code

function finishEdit()
{
  if(!($("select.edit:focus").length || $("select.edit2:focus").length))
  {
    // This should NOT be called if I just focus edit2! But it does!!
  }
}

そのため、編集を選択することから始めます。簡単に編集できます。しかし、今 edit2 を選択しようとすると、編集からのぼかしイベントが呼び出されます。Ok。他のドロップダウンが選択されているかどうかを確認しているので、これは大したことではありません。しかし、この時点では edit2 はまだフォーカスされていないため、チェックが失敗し、コードが呼び出されてドロップダウンが削除され、更新が送信されます!

では、どうすればこれを機能させることができますか?基本的に、別の有効な要素にフォーカスを置いた場合、blur イベントが発生しないようにするにはどうすればよいですか?

(今はもっとはっきりしているといいのですが...)

4

1 に答える 1

1

Ok。解決しました!

$(document).on("blur", "select.edit, select.edit2", function()
{
  $(document).one("click", finishEdit);
});

これは、フォーカスが設定された後に、finishEdit 関数を呼び出します。

于 2013-04-21T14:47:30.787 に答える