2013-05-06 3 views
1

У меня есть веб-сайт с несколькими кнопками, открывающими разные диалоговые окна jQuery ui.Нажмите событие, открывающее неправильный диалог в IE

Внутри одного из этих диалогов (с идентификатором 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; что происходит, это триггеры прослушивателя событий 3, как и ожидалось, но после того, как он запускает прослушиватель событий нажатия для #post_a_story, также запускаются триггеры. Раньше я использовал keyup вместо keydown, и в этом случае клик-событие #post_a_story таинственно запускалось сразу, когда пользователь нажал enter, а мой keyup прослушиватель событий никогда не запускался вообще. Если я удалю прослушиватель событий post_a_story вообще, вместо этого откроется другое окно. Почему есть enter нажатие клавиши, не связанное с click событиями? Обратите внимание: если пользователь нажимает кнопку approve_filter_item вместо нажатия enter, ключевое слово обрабатывается так, как ожидалось.

+2

Есть ли у вас слушатели для отправки события в элементе формы? Возможно, это то, что срабатывает. Вы предотвращаете поведение по умолчанию при нажатии ENTER? – bfavaretto

+0

У меня не было ни одного слушателя в доме, и диалог открывался только в том. Тем не менее, возврат false из моего прослушивателя событий нажатия кнопки остановил событие от пузырей до некоторого невидимого слушателя в ie. Итак, @bfavaretto, если вы хотите отправить свой комментарий в качестве ответа, я был бы рад принять его. Кроме того, я хотел бы узнать, видели ли другие люди такое поведение. –

ответ

0

Как отметил @bfavaretto, .preventDefault() положил конец этому странному, то есть поведению. Я понятия не имею, почему это произошло в первую очередь.