2012-04-20 95 views
2

我有index.php并使用jQuery .load()从load.php加载内容。jQuery:触发器不会触发使用.load()加载的元素

当我在index.php中的元素上触发事件时,事件触发。在相同的元素上,当将.load()加载到index.php时,事件不会触发!

为什么?我做错了什么?

如果我用例如萤火,元素的#ID酷似也是应该的,但甚至没有这样的功能的工作原理:

$('#clickme').click(function() { 
    alert('hello'); 
}); 

同样功能的工作原理,如果元件被放置在index.php文件,而不是装载。加载()。有任何想法吗??

非常感谢您提前!

+0

您是否用文档准备好了包装功能?我不确定,但是我认为当ajax加载时,事件不会在这种情况下被触发......有人可以证实这一点吗? – Helmut 2012-04-20 20:15:28

回答

2

click事件绑定不绑定到执行后创建的任何元素。您可以在​​方法之后立即添加一个click侦听器,也可以使用类似livedelegate的东西来绑定DOM中的元素模式。

+0

这是否意味着,如果在index.php中已经有相同的元素(例如#clickme),但在.load()之后它将被另一个#clickme取代,这会起作用吗? – Chris 2012-04-20 20:21:29

+0

嗯......我想如果你摧毁了这个元素然后重新创建它,它会销毁事件监听器,但可能不会重新创建它;我不确定,但通过使用'live()'而不是'click()'完全可以避免这个问题。 – 2012-04-20 20:24:28

+0

哦,好吧..非常感谢您的快速解答! :)我试着用jQuery中.live()的例子,这个工作正常:$(“a.offsite”)。live(“click”,function(){alert(“Goodbye!”);}) ;所以,再次感谢你! :) – Chris 2012-04-20 20:28:24

3

使用click将在元素被调用时创建一个事件监听器。如果该元素在click被调用时不存在,则不会创建侦听器。您需要使用on(或旧版jQuery中的delegate)使用事件委托。

看看on documentation并阅读有关委派。你需要像这样:

$("<selector of static ancestor>").on("click", "#clickme" , function(){}) 
+0

对不起,如果我不明白......在你的例子中,詹姆斯,<静态祖先的选择者>是什么? – Chris 2012-04-20 20:23:43

+0

这是一个不是动态加载的'#clickme'的祖先元素的选择器。有些元素在负载中。如果没有别的,它可以是“文件”,但更喜欢某些更具体的东西。 – 2012-04-20 20:32:24