ajax刷新的元素里jquery绑定事件失效
<div class="box box-widget">
<div style="display: block;" class="box-body">
<p>邀请了微软office负责人演示[拜拜]</p>
<div>
<span class="text-muted">Thu Sep 10 17:03:57 CST 2015</span>
<span class="text-muted">0转发</span>
<div class="pull-right">
<input type="hidden" name="weibo_id" value="3885571242155022">
<button class="btn btn-box-tool dbtn"><i class="fa fa-times"></i></button>
<button class="btn btn-danger btn-flat btn-xs bbtn "><i class="fa-hand-stop-o"></i>拉黑</button>
<button class="btn btn-success btn-flat btn-xs cbtn "><i class="fa fa-comments-o margin-r-5"></i>0评论</button>
</div>
</div>
</div>
<div style="display: block;" class="box-body box-comments">
<!-- ajax从后台取回来的部分 -->
<div class="box-comment">
<!-- User image -->
<img class="img-circle img-sm" src="http://tp2.sinaimg.cn/3888714809/180/5727878850/1" alt="user image">
<div class="comment-text">
<span class="username">有人说刘伟楠这个<span class="text-muted pull-right">Sat Sep 12 16:41:23 CST 2015</span>
</span>
<!-- /.username -->
测试测试测试
<span class="text-muted pull-right">
<input type="hidden" name="comment_id" value="3886290342368683">
<a href="#" class="link-black text-sm rbtn"><i class="fa fa-share margin-r-5"></i>回复</a>
</span>
</div>
<!-- /.comment-text -->
</div>
<!-- 通过开关控制打开关闭,同时后台获取<div style="display: none;" class="box-body box-comments"> -->
<form class="form-inline" action="#" method="post">
<div class="input-group">
<input type="hidden" name="weibo_id" value="3885571242155022">
<input name="message" placeholder="Type Message ..." class="form-control" type="text"> <span class="input-group-btn">
<button type="button" class="btn btn-primary btn-flat sbtn">发送</button>
</span>
</div>
</form>
<!-- /ajax从后台取回来的部分 -->
</div>
</div>
为什么对<a href="#" class="link-black text-sm rbtn"><i class="fa fa-share margin-r-5"></i>回复</a>
绑定的时间会失效了?单纯静态网页的时候是可以触发动作,使用了动态刷新就会失效。这是什么原因?jquery只对页面载入的部分元素进行选择?
$(".cbtn").click(function(){//打开评论列表
var boxComments=$(this).parent().parent().parent().parent().children(".box-comments");
var weibo_id=$(this).parent().children("input[name='weibo_id']").val();//获取同一级表单的值
$.ajax({
url:"comment/index",
method:"POST",
data:"weibo_id="+weibo_id,
success:function (content){
boxComments.html(content);//评论框内容,后台渲染模板
},
error:function (content){
}
});
boxComments.toggle('fast');
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
jquery事件绑定有2种方式,1种是直接绑定在所选择的dom元素上,这种方式,当你替换dom元素的时候,就不生效了,打个比方,你养了只鹦鹉,你教会它跟着你说hello,这个时候别人把你的鹦鹉换了一只了,新的鹦鹉无论你怎么说hello也不会有反应的,另1钟是事件代理或者叫事件委托,事件绑定的元素并不是触发的元素,而是其父元素,这时候只要父元素没被替换掉,子元素不管怎么替换,只要符合开始绑定的选择器,就可以触发
2种写法的区别,在老版本里面有很多种,1.7以后,推荐统一用on,在on方法的参数内不写选择器是第1种,写虚增其则是第2种
$()
只能选择当前已有的dom 如果后面动态生成的则无法绑定事件。你可以用事件委托来处理。比如一楼说的$().on('click','selector',function(){})
这种方式。原因是什么呢?是因为$()
的时候缓存了这个jq对象。而你新动态新增的是在$()
之后。因此无效。后期插入的元素,你最好用事件委托在父级监听
或者代码段再加载遍 最好是用on委托于父级上或爷爷级上 事件冒泡你懂的
$(".cbtn").live('click',function(){
})这样