在我看来,jquery .live()方法将来不可用。 我有一个函数,触发点击Dom插入html:
$('.post_headl span').live( "click", function(){
alert('###');
});
这很好用。使用.delegate()它不起作用:
$('.post_headl').delegate( "span", "click", function(){
alert('###');
});
正如我上面所写,跨度及其父级由jquery插入。所以我不得不使用.live()。
我的.delegate()函数有什么错误?
我也试过这个:
$(".post_headl").on("click", "span", function(event){
alert('###');
})
没有成功。
答案 0 :(得分:3)
你需要使用更广泛的祖先,比如身体。一个存在于页面加载中并且不会去任何地方并且不会被替换或移动。
$("body").delegate(".post_head1 span", "click", function(){...});
最好使用更接近触发事件的元素的祖先。例如,
<!-- not dynamic, never changes -->
<div id="content>
<!-- the following div is dynamic and gets pulled in later -->
<div class="post_head1"><span>click me</span></div>
</div>
你想要使用
$("#content").delegate(".post_head1 span","click",clickHandler);
或.on
如果当前使用1.7.1+并且不需要向后兼容性
$("#content").on("click",".post_head1 span",clickHandler);
答案 1 :(得分:1)
你应该使用“on”:
$(".post_headl").on("click", "span", function(event){
alert('###');
});
如果我已经正确理解,即使是.post_headl元素也是由jQuery插入的。如果是这种情况,则应将侦听器附加到另一个元素。
您可以使用以下代码对其进行测试:
$(document).on(".post_headl span", "click", function(event){
alert('###');
});
答案 2 :(得分:0)
答案 3 :(得分:0)
.live()(即使对于动态添加的DOM元素)的等价物是文档上的.on():
例如:
$('.post_headl span').live( "click", function(){
alert('###');
});
将更改为:
$(document).on('click', '.post_head1 span', function() {
alert('###');
});