2016-02-01 2 views
-1

У меня есть текстовая область, предназначенная для имитации эффектов чата I.E. когда я нажимаю кнопку ввода, он делает запрос AJAX. Проблема заключается в том, что запрос был сделан дважды:JQuery даже стрельба дважды

$('html').on('keyup', '#message-text', function(e){ 
    if(e.which == 13 && !e.shiftKey){ 
    e.preventDefault(); 
    e.stopPropagation(); 
    $.ajax({...}, 
     success: function(){ 
     console.log("*****POST****"); 
     }, 
     error: function(){ 
     console.log("failure"); 
     } 
    }) 
    } 
}); 

Всякий раз, когда я нажимаю войти, запрос AJAX выполнен успешно дважды и в консоли ****POST**** регистрируется дважды, когда кнопка нажата один раз. Источник для одного журнала - от messages.js:43 (мой файл) и файла, который я не знаком с VM3339:43. В чем проблема?

+0

Возможно ли, что вы связали этот обработчик событий более одного раза? – Pointy

+0

Есть ли вероятность, что в документе существуют два элемента с идентификатором 'message-text'? – twernt

+0

показать код, в котором эта часть включена, как говорит Уокей, она выглядит как ее привязка дважды. – Grumpy

ответ

1

Если вы используете .stopImmediatePropagation() вместо .stopPropagation(), вы убьете событие до того, как будут задействованы избыточные обработчики.

Теперь, конечно, если это работает, значит, ваш установочный код работает дважды, возможно, потому, что файл сценария непреднамеренно импортирован в два тега <script>. Нет ничего плохого в отношении .stopImmediatePropagation(), но, вероятно, было бы неплохо избавиться от того, что вызывает запуск кода в два раза.

Смежные вопросы