2012-11-16 2 views
92

Проблема в том, что у меня есть несколько динамически созданных наборов входных тегов, и у меня также есть функция, которая предназначена для запуска в любое время ввода значение изменяется.jQuery .on ('change', function() {} не запускается для динамически создаваемых входов

$('input').on('change', function() { 
    // Does some stuff and logs the event to the console 
}); 

Однако .on('change') не вызывая для любых динамически создаваемых материалов, только для элементов, которые присутствовали, когда страница была загружена. к сожалению, это оставляет меня в немного затруднительном, как .on предназначен для заменить на .live() и .delegate(), все из которых являются обертками для .bind():/

У кого-нибудь еще была эта проблема или было известно о решении?

ответ

182

Вы должны обеспечить селектор функции on:

$(document).on('change', 'input', function() { 
    // Does some stuff and logs the event to the console 
}); 

В этом случае он будет работать, как вы ожидали. Кроме того, лучше указать какой-то элемент вместо документа.

Прочитайте эту статью для лучшего понимания: http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/

+0

Это установило, спасибо! – Nick

+1

Ты потрясающий! У меня тоже была эта проблема. Никогда не думал, что вы можете добавить селектор в качестве второго параметра. – Tomatrox

+1

Да, как было указано, что это хорошо для узкого элемента, а не для целого документа, если динамическая часть его после некоторого div использует этот, например: $ ('# ajax_table'). On ('change', ' input ', function() {... –

3
$("#id").change(function(){ 
    //does some stuff; 
}); 
+9

hmm ... как насчет немного объяснение фрагмента? – kleopatra

+9

Это все равно не будет работать с динамически создаваемыми элементами, поскольку он пытается привязать к загрузке документа. Однако ответ @ArtemVyshniakov связывается с документом, и когда что-то в одном из элементов изменяется, он запускается, из-за второго аргумента он может запрограммировать требуемый элемент (что означает, что при срабатывании функции он проверяет, соответствует ли источник триггера второму параметру) – FullyHumanProgrammer

+0

Add Th это код в готовой функции. Будет работать – 4302836

10

Используйте этот

$('body').on('change', '#id', function() { 
    // Action goes here. 
}); 
+3

нет необходимости обертывать '#id' в jquery .. – enrey

+0

FYI, @enrey ссылался на '$ ('# id')' в коде вместо '' # id'' – Loaf

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