将来如何使用.live()? .delegate()无法按预期工作

时间:2012-03-27 20:18:31

标签: jquery

在我看来,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('###');

})

没有成功。

4 个答案:

答案 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”:

http://api.jquery.com/on/

$(".post_headl").on("click", "span", function(event){
    alert('###');
});

如果我已经正确理解,即使是.post_headl元素也是由jQuery插入的。如果是这种情况,则应将侦听器附加到另一个元素。

您可以使用以下代码对其进行测试:

$(document).on(".post_headl span", "click", function(event){
    alert('###');
});

答案 2 :(得分:0)

jquery .live()文档说要使用.on()

答案 3 :(得分:0)

.live()(即使对于动态添加的DOM元素)的等价物是文档上的.on():

例如:

$('.post_headl span').live( "click", function(){
            alert('###');            
});

将更改为:

$(document).on('click', '.post_head1 span', function() {
    alert('###');
});