在jQuery中,如何将事件附加到动态html元素?
这个问题在这里已经有了答案:
我添加了一个新的答案来反映后来的jQuery版本中的更改。 .live()方法从jQuery 1.7开始已被弃用。
来自http://api.jquery.com/live/
从jQuery 1.7开始,.live()方法已被弃用。 使用.on()附加事件处理程序。 老版本的jQuery用户应优先使用.delegate(),而不要使用.live()。
对于jQuery 1.7+,您可以使用.on()将一个事件处理程序附加到父元素,并将与“myclass”组合的选择器作为参数传递。
见http://api.jquery.com/on/
所以,而不是...
$(".myclass").click( function() {
// do something
});
你可以写...
$('body').on('click', 'a.myclass', function() {
// do something
});
这将适用于所有在主体中具有'myclass'的标签,无论是否已经存在或稍后动态添加。
这里使用的是body标签,因为这个例子没有更接近静态的周围标签,但是.on方法调用发生时存在的任何父标签都可以使用。 例如,添加动态元素的列表的ul标签将如下所示:
$('ul').on('click', 'li', function() {
alert( $(this).text() );
});
只要ul标签存在,这将工作(不需要li元素存在)。
有时候做这个(顶级答案)并不总是足够的:
$('body').on('click', 'a.myclass', function() {
// do something
});
这可能是一个问题,因为订单事件处理程序被触发。 如果你发现自己正在做这件事,但由于它的处理顺序,它会引发问题。你可以随时把它包装到一个函数中,当被调用时“刷新”监听器。
例如:
function RefreshSomeEventListener() {
// Remove handler from existing elements
$("#wrapper .specific-selector").off();
// Re-add event handler for all matching elements
$("#wrapper .specific-selector").on("click", function() {
// Handle event.
}
}
因为它是一个函数,所以每当我以这种方式设置我的侦听器时,我通常会在文档准备就绪时调用它:
$(document).ready(function() {
// Other ready commands / code
// Call our function to setup initial listening
RefreshSomeEventListener();
});
然后,每当添加一些动态添加的元素时,再次调用该方法:
function SomeMethodThatAddsElement() {
// Some code / AJAX / whatever.. Adding element dynamically
// Refresh our listener, so the new element is taken into account
RefreshSomeEventListener();
}
希望这有助于!
问候,
在jQuery 1.7之后,首选的方法是.on()和.off()
肖恩的回答显示了一个例子。
现已过时:
使用jQuery函数.live()
和.die()
。 在jQuery 1.3.x中可用
从文档:
每当单击某个警报框时,每个段落的文本都会显示出来:
$("p").live("click", function(){
alert( $(this).text() );
});
此外,livequery插件可以完成此操作并支持更多事件。
链接地址: http://www.djcxy.com/p/83645.html上一篇: In jQuery, how to attach events to dynamic html elements?