2013-07-26 87 views
1

所以我用jQuery“.on”函数和动态创建的元素有一些令人不安的结果,我使用的代码是这样的:jQuery .on(“click”...)带有动态创建的元素不起作用

这就是所谓的功能运行时的某个随机:

$(".activity-feed").append('<div class="feed-story big-feed-story feed-story-comment multiline-feed-story">\ 
     <div class="photo-view inbox-size photo-view-rounded-corners">\ 
      <div class="comment-icon">\ 
      </div>\ 
     </div>\ 
     <div class="comment-content">\ 
      <div class="delete ucomment-delete click-target" id="ucomment-'+uqid+'" tabindex="-1" style="outline:none;"></div>\ 
      <span class="feed-story-creator"><a href="/user/'+uid+'/'+username+'">'+username+'</a>&nbsp;</span>\ 
       <span class="comment-text">\ 
        <span>\ 
         <span style="white-space: pre-wrap;">'+$(".comment-box").html()+'</span>\ 
        </span>\ 
       </span>\ 
      <div>\ 
       <span class="feed-story-footer"><span class="story-timestamp-view">'+time+'</span></span>\ 
      </div>\ 
     </div>\ 
    </div>'); 

,然后这个功能应该允许发表评论删除(其在页面的底部,而不是文件准备好之后定义)

$(".delete").on("click", function() { 
    alert('test....'); 
}); 

然而,我点击“ucomment-delete”按钮,并没有任何反应:(但是,如果我点击那里的加载评论,它的工作原理
这是为什么?我究竟做错了什么?

回答

10

尝试事件代表团

$(document).on("click", ".delete", function() { 
alert(); 
}); 
+0

适用于动态创建的评论,但它停止工作的静态创建的评论(它们由PHP输出前加载):/ – King

+1

你应该注册文件准备 –

+0

我已经把它放在$(文件).ready(function(){..});'但我仍然有相同的问题 – King

0

如果on不工作,然后你的jquery不是最新版本试试delegate

$('body').delegate('.delete','click',function(){ 
//stuff 
}); 
1

你需要将其绑定到已经存在的页面,然后在一个元素可以指定页面上可能尚不存在的元素的选择器:

$(".activity-feed").on("click",".delete", function() { 
    alert('test....'); 
}); 

看到这个捣鼓一个例子:

http://jsfiddle.net/G4MGZ/

0

.on()必须被包裹在一个document.ready(),即使是在文件的结尾。我认为@John Koemer所说的也是如此。

相关问题