我将一些方法从 更改$(selector).live('click', function(){});
为$(selector).on('click', function(){});
。
起初它似乎工作完全相同。但是当我在 DOM 上插入新的 html 时,使用相同的选择器插入的新元素, $(selector).on('click', function(){});
在它们被 live() 方法捕获之前并没有被捕获。
为什么?我错过了什么?
我将一些方法从 更改$(selector).live('click', function(){});
为$(selector).on('click', function(){});
。
起初它似乎工作完全相同。但是当我在 DOM 上插入新的 html 时,使用相同的选择器插入的新元素, $(selector).on('click', function(){});
在它们被 live() 方法捕获之前并没有被捕获。
为什么?我错过了什么?
.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
)