5

出于某种奇怪的原因,我的确认框出现了两次。这是我的代码:

$(".DeleteComment").live("click", function(){

    var CommentID = $(this).attr("rel");
    var confirm

    if (!confirm('Are you sure you want to permanently delete this comment?')){

        return false;

    }else{
        $(this).html("loading").css("color", "#999");
        //AJAX HERE
        return false;
    }


});
4

4 回答 4

14

您是否动态加载任何内容(通过 ajax)?可能是 click 事件两次绑定到同一个元素导致双重确认的情况。

于 2009-11-26T02:05:46.607 回答
4

试试这个:

$_blockDelete = false;

$(".DeleteComment").live("click", function(event){

    event.preventDefault();
    //event.stopPropagation(); // it is not necessary

    if (!$_blockDelete)
    {
      $_blockDelete  =true;
      var rconfirm = confirm('Are you sure you want to permanently delete this comment?');
      if (rconfirm)
      {
          $(this).html("loading").css("color", "#999");
          var CommentID = $(this).attr("rel");
          //AJAX HERE
          //return the value "false" the variable "$_blockDelete" once again ajax response

      }
    }

});
于 2009-11-26T02:12:51.180 回答
4

当我们在通过 AJAX 动态加载的元素上绑定事件时会发生这种情况

因此,例如,我们在单击edit表单按钮时加载一些动态 html 内容(例如,模态中的动态内容),

在那个内容中,如果我们在某个按钮(例如delete按钮)上绑定了点击事件,那么每次我们点击edit表单按钮时,它每次都将事件绑定到按钮,clickdelete

如果您在delete按钮的点击事件上设置了确认框,它会询问您为该点击事件绑定的次数,这意味着如果我们点击edit表单按钮 5 次,那么它将要求您确认 5 次。

因此,为了解决该问题,您可以unbind在每次将事件绑定到动态加载的元素之前将事件设置如下:

$(document).off('click', '.DeleteComment').on('click', '.DeleteComment', function () {
   if (confirm('Are you sure you want to permanently delete this comment?')){
      //Delete process
      return true;
   }
   return false;
}

或者解决这个问题的另一种方法是在主页面中添加你的脚本,这意味着静态页面不在动态加载的页面中

于 2019-01-08T12:57:14.193 回答
0

您是否尝试删除未使用的var confirm

于 2009-11-26T02:00:03.030 回答