绑定点击和实时点击

时间:2011-09-01 09:41:39

标签: jquery

为什么此代码有效(see code at 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'的相同代码无效?为什么呢?

谢谢。

5 个答案:

答案 0 :(得分:5)

jQuery documentation说:

  

查找要发送的元素不支持DOM遍历方法   为了活着()。相反,应始终调用.live()方法   直接在选择器之后。

因此,如果您将$div.find('a').bind('click'更改为$('#test a').live('click',则可以使用。

答案 1 :(得分:3)

您可以使用委托代替:

var $div = $('<div><a href="javascript:">click me</a></div>');
$div.delegate('a', 'click', function() {
    alert('Hi');
});
$('#test').append($div);

JS Fiddle Example

答案 2 :(得分:0)

也许你不应该用嵌套替换$(document).ready和.live('click')。问题的原因可能是文档尚未完全加载,因此绑定无效。

所以尝试类似:

$(document).ready(function() {
  $('mybutton').live('click', function(){ ... });
}

答案 3 :(得分:0)

你可以在特定的html元素上使用.bind()(这里:$ div&gt; a),但.live()函数是不同的:它适用于同类的元素(如$(“div&gt;一个“))。

因此,您可以更改$div.find('a').bind('click',

中的$('div > a').live('click',

答案 4 :(得分:0)

关于[jQuery .bind()vs .live()vs .delegate()vs .on()之间的差异的精彩文章:http://www.elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/