Как заставить функцию выбрать и выполнить для вновь добавленного элемента?

#jquery #dom-events

Вопрос:

Предполагается, что эта функция открывает всплывающее окно всякий раз, когда щелкает элемент класса lightbox_trigger:

 jQuery(document).ready(function($) {
 $('.lightbox_trigger').click(function(e) {
  e.preventDefault();
  var url = $(this).attr("href");
  var lightbox = 
            '<div id="lightbox">'  
                '<div id="boxcontent">'  
      '<div id="lightp"></div>'  
                '</div>'    
            '</div>';
    
   $('body').append(lightbox);
   $.get(url, function(data){
    $("#lightp").html(data);
   });
 });              
});

<a href="somepage.html" class="lightbox_trigger">Click here</a> //newly appended element
 

но это не будет работать с новыми элементами, добавленными в DOM. Пожалуйста, попробуйте эту скрипку: https://jsfiddle.net/Lx4et1v8/14 /

Как я могу это исправить?

Комментарии:

1. Вам нужно использовать .on() так, чтобы он привязывался к элементам, которые еще не были добавлены в DOM. Подробнее: api.jquery.com/on

2. Я пытался, но тоже не сработало.

Ответ №1:

🙂

 jQuery(document).ready(function ($) {
    $('body').on('click','.lightbox_trigger',function (e) {
        e.preventDefault();
        var url = $(this).attr("href");
        var lightbox =
            '<div id="lightbox">'  
            '<div id="boxcontent">'  
            '<div id="lightp"></div>'  
            '</div>'  
            '</div>';

        $('body').append(lightbox);
        $.get(url, function (data) {
            $("#lightp").html(data);
        });
        return false;
    });

    $('body').on('click', '#lightbox', function () {
        $('#lightbox').remove();
    });
});