Метод on () не работает как live () - PullRequest
1 голос
/ 28 марта 2012

Я изменяю некоторые методы с $(selector).live('click', function(){}); на $(selector).on('click', function(){});.

Сначала кажется, что он работает точно так же.Но когда я вставляю новый HTML в DOM, новые элементы вставляются с тем же селектором, они не отлавливаются $(selector).on('click', function(){}); и до того, как они отлавливаются методом live ().

почему?Я что-то упустил?

1 Ответ

4 голосов
/ 28 марта 2012

.on принимает другой набор параметров по сравнению с .live. Вы не можете просто заменить одно на другое $(selector).on.live не имеет смысла) .

Правильный синтаксис:

$(document).on('click', selector, function(){});

Это будет привязано ко всем элементам, которые соответствуют selector, независимо от того, когда они добавлены в DOM.

Примечание:

Вместо document вы можете использовать родителя элемента (ов), пока этот родитель остается в DOM.

Например:

<div id="myDiv">
    <p>Hello World</p>
    <p>Hello World</p>
</div>

Тогда вы можете сделать:

$('#myDiv').on('click', 'p', function(){});

Это событие клика сработает для всех <p> тегов, добавленных к #myDiv.

Примечание:

$(selector).on('click', function(){})

- это то же самое, что и

$(selector).bind('click', function(){})

(jQuery 1.7.1 предлагает использовать .on вместо .bind)

...