JQuery Разрешить один клик, но запретить двойной щелчок

Вопрос:Мне изначально захотелось, чтобы представление состоялось в одно событие клика: $("#booking_Form #submit_Booking").bind("click", function(event){..... Затем я обнаружил (очевидно), что двойной щелчок привел к дублированию представления. Итак, я попытался захватить и подавить это: $("#booking_Form #submit_Booking").bind("dblclick", function(event){ return false; }); Но событие с одним щелчком по-прежнему срабатывает дважды. Я исправлю это, думая, что если необходимо, чтобы двойной клик

Вопрос:

Мне изначально захотелось, чтобы представление состоялось в одно событие клика:

$(«#booking_Form #submit_Booking»).bind(«click», function(event){…..

Затем я обнаружил (очевидно), что двойной щелчок привел к дублированию представления.

Итак, я попытался захватить и подавить это:

$(«#booking_Form #submit_Booking»).bind(«dblclick», function(event){ return false; });

Но событие с одним щелчком по-прежнему срабатывает дважды.

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

Или существует какой-то глобальный способ отключения двойных щелчков.

Лучший ответ:

Вы должны использовать .one(). Таким образом, все последующие клики ничего не сделают

$(«#booking_Form #submit_Booking»).one(«click», function(event) { //do something });

Ссылка: http://api.jquery.com/one/

EDIT:
Если вы хотите использовать .one(), как сделать что-то подобное…

JAVASCRIPT:

$(document).ready(function(){ $(«#b1»).one(«click», function(e){ ajaxFunction(); }); function ajaxFunction(){ $(«#b1»).one(«click», function(e){ ajaxFunction() }); $.ajax({ type: «POST», url: «http://fiddle.jshell.net/», //use actual URL success: function(data){ //do something } }); } });​

DEMO:
http://jsfiddle.net/BKqm9/13/

Ответ №1

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

$(«#booking_Form #submit_Booking»).bind(«click», function(event){ $(this).attr(‘disabled’,’true’); … … var btn = $(this); $.ajax(‘someurl.php’,{success: function(){ … … btn.removeAttr(‘disabled’); } }) } Ответ №2

Если вам нужен метод массового обслуживания, попробуйте что-то вроде этого: (просто макет)

$(‘<div>’).clearQueue(‘buttonQueue’); $(«#booking_Form #submit_Booking»).bind(«click», function(event) { $(‘<div>’).clearQueue(‘buttonQueue’); $(‘<div>’).queue(‘buttonQueue’, myFunctionHere()); });

Поставить это в функцию DocumentReady должно быть хорошо.

Ответ №3

Вы можете обернуть его в закрытие и использовать переменную грязного флага. (замыкание, поэтому флаг не является глобальным)

(function(){ var dirtyFlag = false; $(‘#clicker’).click(function(){ if (dirtyFlag) return; dirtyFlag = true; setTimeout(function(){ console.log(‘clean and proceeding’); dirtyFlag = false; }, 500); }); })();​

Fiddle здесь. Поскольку отключение кнопки не является вариантом, это IMO – самое простое и простое решение.

Ответ №4

Это может помочь:

$(«#booking_Form #submit_Booking»).bind(«click», function(e) { // custom handling here e.preventDefault(); e.stopPropagation(); }​

Попробуйте.

Оцените статью
Добавить комментарий