2012-11-29 34 views
0

我有一个函数onclick是添加HTML:在它的功能追加HTML

jQuery(".test").click(function() { 
    jQuery(this).prevAll("input").val("5") 
    jQuery(".after").append("<div><input /><a class='.test'>click doesn't work !</a></div>") 
}); 

所以,当我点击我的.test类,功能被触发。这个工作,但我已经附加了另一个类.test,当我点击它,功能不会触发。为什么? 谢谢。

小提琴:http://jsfiddle.net/csL8G/3/

回答

2

如果您使用jQuery,您可以使用jQuery.on()方法1.7+

//.on(events [, selector] [, data], handler(eventObject)) 

$(document).on('click', '.test', function(){ 
    //.... 
}); 

以前版本u可以使用.live().bind()方法。

+0

完美的作品,谢谢! – Kaherdin

+0

@Kaherdin我的回答是在Talha之前发布的,并且与此相同,只是我将on()领域限制为body标签。那么为什么你更喜欢这个答案? – jtheman

+2

@Kaherdin - 记住这种方法为'document'中的每个元素添加了一个click事件处理函数。如果你的链接全部在一个容器元素中,那么将'document'改为该选择器(例如'#容器)是一种更好的方法,因为它具有较少的开销。 – Archer

1

使用此检查动态添加。测试内容:

jQuery("body").on('click', '.test', function() { 
    jQuery(this).prevAll("input").val("5"); 
    jQuery(".after").append("<div><input /><a class='.test'>click doesn't work !</a></div>"); 
}); 

如果您正在使用jQuery小于1.8则使用实时代替:

jQuery('.test').live('click', function() { ... 

基本上原因是因为当DOM加载时,初始点击函数只适用于文档中已有的元素。但与on()处理程序,你设置一个侦听器来检查领域(主体)哪些内容有测试类,并使得点击事件的工作...

+0

*** ***为什么用这个? – ahren

+0

@ahren您已经在上面的评论中回答了您的意见...... – jtheman

+0

但是,如何使用上面提出的'.on()'方法解决问题? (我不是问自己,我要求这个更彻底的答案) – ahren

0

嘿检查你的HTML你写:

<a class=".test"></a> 

它应该是唯一class="test"

jQuery("body").on('click', '.test', function() { 
    jQuery(this).prevAll("input").val("5"); 
    jQuery(".after").append("<div><input /><a class='test'>click doesn't work !</a></div>"); 
}); 
+0

嘿在jQuery的男人追加你有类型那是你的错! – Heart

+0

不需要.on()和.live()或.delegate()函数! – Heart