2015-09-25 5 views
-1

У меня возникла проблема при использовании append() для добавления элемента. После добавления я хочу обработать событие нажатия этого элемента, но это не сработает. Это мой код:Невозможно вызвать событие элемента после добавления элемента

$(...).append("<input class='chat_input'>"); 

$('.chat_input').on('keypress', function(ev){ 
    console.log(ev) }); 

Пожалуйста, помогите мне.

+1

[Код, который вы опубликовали, отлично работает.] (http://jsfiddle.net/ m6L4rrs0 /). Измените свой вопрос и убедитесь, что он содержит фактическое воспроизведение. – Jeroen

+0

Если вы выполняете эти строки в указанном порядке, здесь нет никаких проблем. – George

ответ

-1

Вам необходимо добавить обработчик события в документ, если вы запустите свой дескриптор нажатия, прежде чем добавить его, он не будет добавлен ни к каким добавленным входам после.

Вот jsFiddle: https://jsfiddle.net/CanvasCode/z8xcytLq/

JQuery

$(function() { 

    $('.input').append("<input class='chat_input'>") 

    $(document).find('.chat_input').on('keypress', function (ev) { 
     console.log(ev) 
    }); 
}); 

Также глобальный обработчик события лучше, так как вы не будете иметь 6 различных обработчиков для 6 различных входов

+0

'$ (document) .find ('. Chat_input')' точно так же, как '$ ('. Chat_input')', где последнее, вероятно, немного оптимизировано. Вы по-прежнему прикрепляете обработчик события нажатия клавиши к элементу .chat_input, поэтому ваше упоминание о «глобальном обработчике событий» также неверно. То, что вы сделали w.r.t. вопрос, но не упомянутый, заключается в добавлении функции, вокруг которой будет вызываться jQuery после загрузки документа. –

0

Я установил его это мой код: $ (document) .delegate ('.chat_input', 'keypress', function (ev) {

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