使用jQuery,我们可以将事件处理程序附加到页面中的元素,这是在document.ready()函数中完成的。现在我的困难是,我有一些元素(如链接等)稍后加载(使用ajax请求)后才下载文档。所以那些新元素无法绑定到我在页面中定义的处理程序上。是否有任何方法可以知道跟随的ajax查询何时完成,然后在其中绑定我的事件处理程序。
提前感谢。
提前感谢。
<div id="some_container"> <!-- this is present when the page loads -->
<a class="link">some button</a> <!-- this is present when the page loads -->
<a class="link">some button</a> <!-- this is present when the page loads -->
<a class="link">some button</a> <!-- this is present when the page loads -->
<a class="link">some button</a> <!-- this one is dynamic -->
<a class="link">some button</a> <!-- this one is dynamic -->
<a class="link">some button</a> <!-- this one is dynamic -->
<span>some text</span> <!-- this one won't match the selector -->
<span>some text</span> <!-- this one won't match the selector -->
</div>
实例: http://jsfiddle.net/5jKzB/
你可以将一个处理程序绑定到some_container
上,并在.delegate()
中传递一个选择器,这里选择器是"a.link"
。
当在some_container
内点击符合该选择器的元素时,处理程序将被调用。
$('#some_container').delegate('a.link', 'click', function() {
// runs your code when an "a.link" inside of "some_container" is clicked
});
some_container
,就不管何时将"a.link"
元素添加到DOM中都没有关系。
live()
[文档]方法是相同的,只是容器是document
,因此它处理页面上的所有点击事件。$('a.link').live('click',function() {
// runs your code when any "a.link" is clicked
});
如果您需要使用实时绑定事件,则需要使用 .live()
。请参考http://api.jquery.com/live/。
示例:
$('a').live('click', function() {
// Do something useful on click.
});
自从jQuery 1.7版本起,.live()方法已被弃用,因此这些答案现在已经过时。对于jQuery 1.7+,您可以使用.on()将事件处理程序附加到父元素。
.live()
更快,那我可以肯定地说是的。传递给你的delegate
调用的选择器只需要在指定容器中发生事件时运行。我从来不使用.live()
。 - user113716