jQuery.on ('change', function () {} не срабатывает для динамически создаваемых входов
проблема в том, что у меня есть некоторые динамически созданные наборы входных тегов, и у меня также есть функция, которая предназначена для запуска в любое время, когда изменяется входное значение.
$('input').on('change', function() {
// Does some stuff and logs the event to the console
});
на
.on('change') не срабатывает для любых динамически созданных входных данных, только для элементов, которые присутствовали при загрузке страницы. К сожалению, это оставляет меня в замешательстве как .on предназначен для замены .live() и .delegate() все из которых являются оболочками для .bind() :/кто-нибудь имел эту проблему или знает решение?
5 ответов:
вы должны предоставить селектор
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/
вы можете применить один подход:
$("#Input_Id").change(function(){ // 1st // do your code here // When your element is already rendered }); $("#Input_Id").on('change', function(){ // 2nd (A) // do your code here // It will specifically called on change of your element }); $("body").on('change', '#Input_Id', function(){ // 2nd (B) // do your code here // It will filter the element "Input_Id" from the "body" and apply "onChange effect" on it });
просто чтобы прояснить некоторые нестыковки. Это работает только тогда, когда элемент присутствует на нагрузке DOM:
$("#target").change(function(){ //does some stuff; });когда элемент динамически загружается позже, вы можете использовать:
$(".parent-element").on('change', '#target', function(){ //does some stuff; });
Comments