как сделать событие живого клика на новом добавленном DOM

Я пользователь live () и знаю, что live () устарела. Я пытался использовать bind (), чтобы событие на новых добавленных объектах работало, но это не так.

Подскажите, пожалуйста, как правильно выполнить bind ()? или есть какой-то другой способ сделать эту задачу?

это HTML:

<table>
    <tr>
        <td> hi there <span class="click">click me</span></td>
    <tr>
    <tr>
        <td> hi there2 <span class="click">click me</span></td>
    <tr>
    <tr class="end">
        <td></td>
    </tr>
</table>
<button class="add_new">add new row</button>  

это JS:

var new_row = '<tr><td> hi there, new row! <span class="click">click me</span></td><tr>';

$('.add_new').click(function() {
    $('.end').before(new_row);    
});


$('.click').bind('click', function() {
   alert('clicked');
});

если возможно, я хочу использовать нативный метод jquery, а не плагины. это мой jsfiddlehttp://jsfiddle.net/bondythegreat/z3uXH/

Ответы на вопрос(3)

Решение Вопроса

.on() или же.delegate().

$('table').on('click', '.click', function() {
    // your code here
});

Для динамического поведения, использующего делегированную обработку событий, основная идея состоит в том, что первый выбор (в объекте jQuery) должен быть статическим родительским объектом, который не создается динамически после установки обработчика событий. Второй селектор, который передается в качестве второго аргумента в .on (), является селектором, который соответствует конкретному элементу, для которого вы хотите обработчик события. Эти элементы могут быть созданы динамически после установки обработчика событий.

С помощью.click() или же.bind() получает статические обработчики событий, которые работают только с объектами, которые присутствуют во время первоначального запуска кода.

Чтобы сделать этот код более надежным, я бы предложил две вещи. Во-первых, не используйте имя класса, например & quot; click & quot; это очень легко спутать с событием. Во-вторых, поместите идентификатор в вашу таблицу, чтобы на идентификатор можно было ссылаться в первом селекторе, а не в самом общем"table" которые могут быть случайно активированы в других таблицах на вашей странице.

 bondythegreat10 апр. 2012 г., 09:03
спасибо jfriend00 и все. и это очень полезные советы, которые вы добавили. хорошо замечено

live() заменяетсяon(), Страницы документа дляlive() есть руководство, как обновить до новых методов.

В вашем случае это будет означать:

$('table').on('click','.click', function() {
   alert('clicked');
});

Увидетьизменено & amp; рабочая скрипка

on() method

подобнотак:

$('table').on('click', '.click', function() {
   alert('clicked');
});

& # X200B;

Ваш ответ на вопрос