绑定click事件append div,点击回复再移除。为什么点击“回复”按钮会增加下次append的div的个数?

var $html="<div id='reply1'>haha <button class='replyBtn'>回复</button></div>"
$(".reply").one("click",function(){

$(this).parent().parent().append($html);

});
$(".replyBtn").live("click",function(){

$("#reply1").remove();
$(".reply").one("click",function(){
    $(this).parent().parent().append($html);
});

});
要做的功能是点击.reply弹出回复框div,点击"回复"button关闭这个div。

问题:第一次点击.reply添加div是没有问题的;但是一旦点击了回复remove掉div后,下次再点击.reply却添加了两个div; 都关闭后再点击.reply,就添加了三个div....总之,就是点击过几次回复,下次点.reply就会出现几个div。。。。为什么呀?求助

阅读 4.8k
6 个回答

div 虽然被移除了,但他绑定的事件并没有被解绑,$(".replyBtn").unbind().live("click",function(){...
现在jquery不建议用live了,所有一般这么写$(".replyBtn").off().on("click",function(){...

使用jquery处理事件,建议只采用on和off两个方法。

这个说明你没有删除对元素

建议用on和off。
因为你没有给出结构,所以我猜问题出现在live上:
改成这样试试:

$(".replyBtn").die('click').live("click", function() { 
    $("#reply1").remove();
    $(".reply").one("click", function() {
        $(this).parent().parent().append($html);
    });
});

原先绑定的事件没有被移除

$("").off('click','.reply');
$("").on('click','.reply',function(){});

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<title></title>

</head>
<body>
<div class="reply">回复1</div>
<div class="reply">回复2</div>
<div class="reply">回复3</div>
<div class="reply">回复4</div>
<div class="reply">回复5</div>
<div class="reply">回复6</div>
<div class="reply">回复7</div>
<div class="reply">回复8</div>
</body>
<script src="http://apps.bdimg.com/libs/jquery/1.7.2/jquery.min.js"></script>
<script>

var $html = "<div id='reply1'>haha <button class='replyBtn'>回复</button></div>";
$(".reply").one("click", function() {
    $(this).parent().parent().append($html);
});
$(".replyBtn").live("click", function() {

    $("#reply1").remove();
    $(".reply").off("click").one("click",function(){
        $(this).parent().parent().append($html);
    });
});

</script>
</html>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题