Существует кнопка, и когда пользователь нажимает кнопку, некоторые данные сохраняются в фоновом режиме. Проблема заключается в том, что пользователь быстро нажимает на кнопку, обработчик события выполняется несколько раз.
Это код
var x = 1;
$('#button').click(function() {
// Do something
// Save some data on network
x++;
console.log(x);
});
Я хочу, чтобы этот обработчик выполнялся, когда пользователь нажимает кнопку только один раз. Даже в случае двойного или триплексного щелчка это должно выполняться только один раз. Я просто хочу, чтобы избежать быстрых кликов, этот обработчик может снова выполнить кадр
У меня в голове много решений, например
-
Определите глобальную переменную типа
IS_BUTTON_HANDLER_WORKING = false
, и когда вы введете обработчик, установите его в true и в конце установите для него значение false. И проверьте, верно ли это только возврат из функции. -
Отсоедините обработчик в начале и повторите попытку в конце.
У вас есть 25 кнопок в вашем приложении. Какой должен быть наилучший подход для реализации этого.
Посмотрите на Fiddle
Решение
$('#button').click(function() {
$(this).attr('disabled', true);
// Do something
// Save some data on network
$(this).removeAttr('disabled');
});
Используя это, мы уверены, что наш следующий обработчик будет выполнен только тогда, когда предыдущее выполнение было выполнено полностью.