Отключить двойной щелчок на событии jQuery AJAX

У меня есть кнопка нумерации страниц, которая запускает функцию Ajax для получения новых результатов на странице. Все работает нормально, единственное, что, если я дважды нажму на кнопку, я получу удвоенные результаты, потому что он делает 2 одинаковых вызова.

Я знаю, что есть много способов обойти эту вещь, но, похоже, ничего не работает полностью.

Теперь я использую переменную как флаг...

var isPaging = 0;
$('.container').on('click', '.bh-pagination-button', function(){

    if (!isPaging) {

        isPaging = 1;

        callBehanceProjectsList();

        isPaging = 0;
    }
});

Кажется, работает, если я немного медленный, но если я очень быстро нажимаю два или три раза, он делает n-ые вызовы, все они идентичны.

Тогда я увидел, что есть и другие решения:

one();
unbind();
die();

etc...

Те, которые на самом деле могли бы работать, проблема в том, что после того, как я отключил событие click, я не могу снова включить его, и мне нужно много раз щелкать после окончания нумерации страниц.

Есть ли у вас какие-либо идеи?

Заранее спасибо.

2 ответа

Я также столкнулся с подобной проблемой. Мое решение _

   $('#acceptButton').attr("disabled", true);

Вот acceptButton это идентификатор кнопки.

Как насчет этого?

$('.container').on('click', '.bh-pagination-button', function() {
  $(this).prop('disabled', true);
  callBehanceProjectsList();
  $(this).prop('disabled', false);
});

Таким образом, кнопка будет отключена непосредственно перед началом нумерации страниц и автоматически включится после ее окончания. Это предотвратит многократное нажатие на кнопку, поэтому необходимость в определенной переменной также будет устранена.

Я думаю, что вы должны использовать Jquery.BlockUI.Js.

Вот пример кода для этого,

$(document).ready(function() {

    $("#Button3").click(function() {
    console.log('d');
        $.blockUI();
        setTimeout(function() {
            $.unblockUI({
                onUnblock: function() {
                //Write your unblock logic
                    alert('onUnblock');
                }
            });
        }, 2000);
    });
});

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

Рабочая скрипка: http://jsfiddle.net/nwjsgxrp/

Другие вопросы по тегам