为什么此代码有效(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'
的相同代码无效?为什么呢?
谢谢。
答案 0 :(得分:5)
查找要发送的元素不支持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);
答案 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/