tuve un problema similar, pero deshabilitar el botón no se hicieron plenamente el truco. Hubo algunas otras acciones que tuvieron lugar cuando se hizo clic en el botón y, a veces, el botón no se deshabilitó lo suficientemente pronto y cuando el usuario hizo doble clic, 2 eventos se desencadenaron.
Tomé la idea de tiempo de espera de Pangui, y combiné ambas técnicas, desactivando el botón e incluyendo un tiempo de espera, por las dudas. Y he creado un simple plugin de jQuery:
var SINGLECLICK_CLICKED = 'singleClickClicked';
$.fn.singleClick = function() {
var fncHandler;
var eventData;
var fncSingleClick = function (ev) {
var $this = $(this);
if (($this.data(SINGLECLICK_CLICKED)) || ($this.prop('disabled'))) {
ev.preventDefault();
ev.stopPropagation();
}
else {
$this.data(SINGLECLICK_CLICKED, true);
window.setTimeout(function() {
$this.removeData(SINGLECLICK_CLICKED);
}, 1500);
if ($.isFunction(fncHandler)) {
fncHandler.apply(this, arguments);
}
}
}
switch (arguments.length) {
case 0:
return this.click();
case 1:
fncHandler = arguments[0];
this.click(fncSingleClick);
break;
case 2:
eventData = arguments[0];
fncHandler = arguments[1];
this.click(eventData, fncSingleClick);
break;
}
return this;
}
y luego usarlo como esto:
$("#button1").singleClick(function() {
$(this).prop('disabled', true);
//...
$(this).prop('disabled', false);
})
Es un botón, puede hacer clic tantas veces como se desea. Solo evite la acción predeterminada o desactívela después del primer clic. – adeneo
De acuerdo con adeneo. La solución más simple parece desactivarla después de hacer clic. – DaiYoukai
si está deshabilitado! no será una devolución de datos! ¡Solo se debe permitir un solo clic! ¿Tiene alguna solución para que solo se produzca un clic hasta que se complete el procesamiento de la forma –