Предотвратить несколько кликов по всему миру - PullRequest
0 голосов
/ 06 ноября 2019

Я использую этот блок кода, чтобы не дать нетерпеливым клиентам многократно щелкать и отправлять несколько запросов на наш сервер.

<script>
    function prevent_click() { 
        return false;
    }

    $('a, input[type=submit], input[type=button]').on('click', function(e) { 
        $(e.currentTarget).click(prevent_click); 

        setTimeout(function(){
            $(e.currentTarget).unbind('click', prevent_click);
        }, 3000);

    });
</script>

Он блокирует события щелчка после первого щелчка в течение 3 секунд, но делает это длята же ссылка, кнопка и т. д. Как я могу запустить это для всех ссылок, но не индивидуально?

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

Просто установите флажок, чтобы предотвратить действие по умолчанию следующим образом:

var preventClick = false;
$('a, input[type=submit], input[type=button]').on('click', function(e) {
    $('div').text( preventClick ? 'Click blocked' : 'Allowed' );
    if (preventClick) {
        e.preventDefault();
        e.stopPropagation();
    } else {
        preventClick = true;
        setTimeout(function() {
            preventClick = false;
        }, 3000);
    };
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#">I am link</a>
<input type="submit" value="Submit" />
<input type="button" value="Button" />
<div>Click result...</div>

Обратите внимание, что останавливает распространение , что:

Предотвращает всплытие события в дереве DOMпредотвращение уведомления родительских обработчиков о событии.

Также на JSFiddle .

0 голосов
/ 06 ноября 2019

При нажатии кнопки, вы должны отключить кнопку глобально, как это:

$(document).on('click', 'button', function()
{
   $(this).attr("disabled", "disabled");
});
0 голосов
/ 06 ноября 2019

Вы можете просто попробовать e.preventDefault () для всех тегов href следующим образом:

$('a').on('click',function (e) {
    e.preventDefault();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...