如何使用jQuery将事件附加到动态HTML元素?假设我有一些jQuery代码,它将事件处理程序附加到具有类的所有元素.myclass。例如:$(function(){
$(".myclass").click( function() {
// do something
});});我的HTML可能如下:<a class="myclass" href="#">test1</a><a class="myclass" href="#">test2</a><a class="myclass" href="#">test3</a>这没有问题。但是,请考虑.myclass在将来某些时间是否将元素写入页面。例如:<a id="anchor1" href="#">create link dynamically</a><script type="text/javascript">$(function(){
$("#anchor1").click( function() {
$("#anchor1").append('<a class="myclass" href="#">test4</a>');
});});</script>在这种情况下,test4链接是在用户单击时创建的a#anchor1。该test4链接没有click()与之关联的处理程序,即使它有class="myclass"。基本上,我想编写click()处理程序一次,并将其应用于页面加载时出现的内容,以及稍后通过AJAX / DHTML引入的内容。知道如何解决这个问题吗?
4 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
有时这样做(最高投票的答案)并不总是足够的:
$('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();}
希望这有帮助!
问候,
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
如果您要向DOM添加一堆锚点,请查看事件委派。
这是一个简单的例子:
$('#somecontainer').click(function(e) { var $target = $(e.target); if ($target.hasClass("myclass")) { // do something }});
添加回答
举报
0/150
提交
取消