Вопрос:
Мне изначально захотелось, чтобы представление состоялось в одно событие клика:
$(«#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(); }
Попробуйте.