JQuery / Javascript подтверждают приход дважды - PullRequest
4 голосов
/ 26 ноября 2009

По какой-то странной причине я получаю свой ящик подтверждения, появляющийся дважды. вот мой код:

$(".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 ]

13 голосов
/ 26 ноября 2009

Загружаете ли вы какой-либо контент динамически (через ajax)? Может случиться, что событие click дважды связывается с одним и тем же элементом, что приводит к двойному подтверждению.

4 голосов
/ 26 ноября 2009

попробуйте это:

$_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

      }
    }

});
1 голос
/ 08 января 2019

Это происходит, когда мы связываем событие с элементами, которые загружаются динамически через AJAX

Так, например, мы загружаем некоторое динамическое HTML-содержимое (например, динамическое содержимое в модальном режиме) по нажатию кнопки формы edit,

И в этом контенте, если у нас есть событие клика на кнопке , например. delete, затем каждый раз, когда мы нажимаем edit кнопку формы, она связывает событие click с delete кнопкой каждый раз,

И если вы установили поле подтверждения для события нажатия кнопки 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;
}

Или Другой способ решения этой проблемы - добавить скрипт на главной странице, то есть статическая страница не загружается динамически .

0 голосов
/ 26 ноября 2009

Вы пытались удалить неиспользованный var confirm?

...