Подтвердить что ты не робот

Событие jQuery click после добавления содержимого

Интересно, почему приведенный ниже пример не работает?

<a id="load_list" href="#">Load the list</a>

<ul></ul>

<script type="text/javascript">
$(document).ready(function() {
    $('#load_list').click(function() {
        $('ul').append('<li><a href="#">Click here</a></li>');
        return false;
    });
    $('ul li a').click(function() {
        alert('Thank you for clicking');
        return false;
    });
});
</script>
4b9b3361

Ответ 1

Поскольку элементы, которые вы добавляете, не существуют, когда вы определяете обработчик click, они создаются динамически. Чтобы исправить это, вы можете использовать метод delegate() из jQuery.

$('ul').delegate('a','click',function() {
    // your code here ...
});

Пример в Интернете: http://jsfiddle.net/J5QJ9/

Ответ 2

Из jQuery 1.7 вы можете использовать обработчик .on() для привязки вновь созданного элемента к событию 'click':

<script type="text/javascript">
$(document).ready(function() {
    $('#load_list').click(function() {
        $('ul').append('<li><a href="#">Click here</a></li>').on('click', 'ul li a', function () {
            alert('thank you for clicking');
        });
    });
</script>

(это в оригинальном примере).

Ответ 3

.live устарел с 1.7. Попробуйте это (jquery 2.1.4):

Html:

<a id="load_list" href="#">Load the list</a>

<ul></ul>

JQuery

$(document).ready(function() {

 $('#load_list').click(function() {
   $('ul').html("");    

   $("<li/>", {
        "class" : "someClass",
        text: "Click here",
        click: function() {
          alert($(this).text());
        }
      }).appendTo('ul');
  });
});

или что-то вроде этого (но я не нашел, как присоединить клик к якорю):

$(document).ready(function() {
 $('#load_list').click(function() {
   $('ul').html("");

   $('<li><a href="#">Click here</a></li>').on({
      click: function() {
        alert("hoi");
      }
    }).appendTo("ul");
 });
});

Ответ 4

потому что вы применяете событие click перед тем, как элемент находится в dom, вам нужно использовать . live()

Ответ 5

Попробуйте этот новый код, он удаляет существующие события щелчка для старых элементов, а затем добавляет их снова как для старого, так и для нового.

<a id="load_list" href="#">Load the list</a>

<ul></ul>

<script type="text/javascript">
$(document).ready(function() {
    $('#load_list').click(function() {
        $('ul').append('<li><a href="#">Click here</a></li>');
        $('ul li a').unbind('click', thanks());//Remove existing binds
        $('ul li a').bind('click', thanks());//Remove existing binds
        return false;
    });
    function thanks() {
        alert('Thank you for clicking');
        return false;
    });
    $('ul li a').bind('click', thanks());
});
</script>

Ответ 6

$(document).on('click','ul li a', function(){
      // Content Code
});