绑定click和live click

4

为什么这段代码有效 (在jsfiddle上查看代码)

$(document).ready(function() {
    var html = '<div><a href="javascript:">click me</a></div>';
    var $div = $(html);
    $div.find('a').bind('click', function() { //attention on bind
        alert('Hi');
    });
    $('#test').append($div);
});

同样的代码,但是将.bind('click'替换为.live('click'后无法工作?为什么?
谢谢。

你的意思是用.live('click')替换$(document).ready吗? - Bas Slagter
5个回答

5

jQuery文档中指出:

DOM遍历方法不支持查找要发送到.live()的元素。相反,.live()方法应该直接在选择器后调用。

因此,如果将$div.find('a').bind('click'更改为$('#test a').live('click',它将起作用。


3
您可以像这样使用委托进行替代:
var $div = $('<div><a href="javascript:">click me</a></div>');
$div.delegate('a', 'click', function() {
    alert('Hi');
});
$('#test').append($div);

JS Fiddle Example


我喜欢它,但你和 OP 一样犯了同样的错误:你把 $div 当作全局变量使用,但没有任何显示它是全局的。 - Tadeck
不确定这是否有太大的影响,但我已经进行了更改。 - Richard Dalton

0
也许你不应该用嵌套的方式将$(document).ready替换为.live('click')。你遇到问题的原因可能是文档还没有完全加载,所以绑定事件还没有生效。
可以尝试像这样做:
$(document).ready(function() {
  $('mybutton').live('click', function(){ ... });
}

0
你可以在特定的HTML元素上使用.bind()(这里是:$div > a),但.live()函数不同:它适用于相同类型的元素(如$("div > a"))。
因此,您可以将$div.find('a').bind('click',更改为$('div > a').live('click',

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接