さまざまな jQuery ui ダイアログ ボックスを開くボタンがいくつかある Web サイトがあります。
これらのダイアログの 1 つ (ID は ) の内部にfilter_story
は、ユーザーがキーワードを入力できるテキスト フィールドがあり、後でサーバーをポーリングするときに記事をフィルター処理するために使用します。approve_filter_item
ユーザーが各項目を入力した後にクラスのボタンをクリックして複数のキーワードを入力できるように、またはユーザーがenter
各キーワード間のボタンを クリックするだけでよいように、テキスト フィールドを設定しました。
// button to open the keyword filter list
$( "#filter_stories" ).click(
function(){
$( "#filter_dialog" ).dialog( "open" );
}
);
$(".approve_filter_item").click(function(){
[process the just inserted keyword and then put focus back on the textfield]
});
//listen for enter key when user's focus is on entering a new keyword
$(".new_filter_item").keydown(function (e) {
if (e.keyCode == 13) {
$($(this).parents("tr")[0]).find(".approve_filter_item").click();
}
});
// button to show the post story dialog form
$( "#post_a_story" ).click(
function(){
$( "#new_story_form" ).dialog( "open" );
}
);
Chrome、FF、Safari のすべてのバージョンで、すべてが期待どおりに機能します。ただし、IE でいくつかの悪い動作が発生しています。
IE ユーザーが#filter_stories
ダイアログにキーワードを入力してクリックしたとしますenter
。イベントリスナーは期待どおりにトリガーされますkeydown
が、トリガーのクリックイベントリスナー#post_a_story
も実行されます。以前はkeyup
の代わりに使用keydown
していましたが、その場合#post_a_story
、ユーザーが をクリックするとすぐに不思議なことにクリックイベントがトリガーされenter
、keyup
イベント リスナーはまったくトリガーされませんでした。イベント リスナーを完全に削除すると、post_a_story
代わりに別のダイアログ ボックスが開きます。enter
キーを押すと無関係なclick
イベントがトリガーされるのはなぜですか?
approve_filter_item
ユーザーが をクリックする代わりに ボタンをクリックした場合enter
、キーワードは期待どおりに処理されることに注意してください。