var html = '<div><a href="#" id="test">Btn</a></div>';
$(html).find("#test").click(function(){
console.log("clicked");
});
//later
$(htmlNode).html(html);
为什么我没有收到“点击”日志?
发布于 2011-04-18 22:13:08
您需要附加jQuery对象,而不仅仅是设置内部的HTML:
var html = $('<div><a href="#" id="test">Btn</a></div>');
html.find("#test").click(function(){
console.log("clicked");
});
//later
$(htmlNode).append(html);
编辑:为了更清楚起见,使用append
而不是html
,即使在传入jQuery对象时html
在功能上与.empty().append(val)
等效。
发布于 2011-04-18 22:16:54
问题是,您正在将单击事件绑定到DOM中还不存在的对象,并且它不是jQuery对象。您可以采取两种方法。
1)使用Live:
$("#test").live('click', function(){
console.log("clicked");
});
//later
var html = '<div><a href="#" id="test">Btn</a></div>';
$(htmlNode).html(html);
2)构造一个合适的jQuery DOM对象,并绑定到该对象上。
var a = $('<a></a>').attr('href', '#').click(function() {
console.log("clicked");
});
//later
$(htmlNode).html(a.wrap('<div></div>').html()); //This could also use append or appendTo.
最好的方法取决于你的情况。一定要考虑到,在JavaScript中附加到DOM是非常昂贵的!
发布于 2011-04-18 22:17:31
您只是将单击事件附加到html..you,而不是实际触发单击事件
尝试在附加事件后调用.click()
。
https://stackoverflow.com/questions/5704140
复制相似问题