@Hey_Hey

Почему скрипт не срабатывает при изменении сгенерированных элементов?

Всем привет! Есть вот такой скрипт, который, по идее, должен вызываться при каждом изменении элементов с тегом "z"(в моем случае это file input), но скрипт реагирует только на изменение тех полей, которые были созданы не пользователем, а с загрузкой страницы.
function readURL(input) {
            if (input.files && input.files[0]) {
                var reader = new FileReader();
            
                reader.onload = function (e) {
          
                    $(input).next().attr('src', e.target.result);
                }
            
                reader.readAsDataURL(input.files[0]);
            }
        }
    
        $(".z").change(function(){
            readURL(this);
        });
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Потому, что назначение событий происходит именно в тот момент, когда выполняется код назначения. Нужно либо при добавлении новых элементов, заново им назначать событие, либо для родителя (который добавлен с самого начала) назначить это событие, и передать детишкам.
$(".parent-block").on('change', '.z', function(){
            readURL(this);
        });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Почитай про разницу между event binding и event delegation
Ну и вот на закуску
api.jquery.com/on
Ответ написан
Комментировать
Palych_tw
@Palych_tw
Типа веб-разработчик
Потому что на элементы созданные уже после загрузки страницы не вешаются ваши ивенты, которые вы цепляете по document ready. После создания элемента на него нужно вешать ивент (change, click и пр.).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы