Click事件在IE中打开了错误的对话框

时间:2013-05-06 00:15:22

标签: javascript jquery-ui internet-explorer

我有一个网站,有几个按钮可以打开不同的jQuery ui对话框。

其中一个对话框(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的click事件侦听器也会触发。以前,我使用keyup代替keydown,在这种情况下,当用户点击#post_a_story和我的enter时,会立即神秘地触发keyup点击事件事件监听器从未触发过。如果我完全删除post_a_story事件侦听器,则会打开另一个对话框。为什么enter按键会触发不相关的click事件?

请注意,如果用户点击approve_filter_item按钮而不是点击enter,则会按预期处理关键字。

1 个答案:

答案 0 :(得分:0)

正如@bfavaretto指出的那样,.preventDefault()结束了这种奇怪的行为。我不知道为什么它首先发生。