2010-07-29 21 views
30

Tengo un botón de envío al final del formulario.¿Cómo deshabilitar el botón de enviar una vez que se ha hecho clic?

he añadido la siguiente condición para el botón de envío:

onClick="this.disabled=true; 
this.value='Sending…'; 
this.form.submit();" 

Pero cuando se mueve a la siguiente página, los parámetros no pasó y se transmiten los valores nulos.

+0

Esto probablemente no es culpa de las llamadas que muestra. Por favor, muestre el HTML completo del formulario. –

+3

No utilice el evento onclick del botón Enviar: use el evento onsubmit del formulario. De lo contrario, no captarás una presentación desde el teclado. – Nick

Respuesta

26

Probablemente esté enviando el formulario dos veces. Quite this.form.submit() o agregue return false al final.

que debe terminar con onClick="this.disabled=true; this.value='Sending…';"

+12

Sin embargo, cuidado ya que esto no funciona en IE8 y Chrome ... bueno, funciona porque hace lo que el script dice que hacer, pero una consecuencia es que también deshabilita el envío del formulario. –

+0

@ShawndeWet: publicar el método correcto –

+0

Ver la respuesta de @ andreaskoberle –

3

No creo que necesite this.form.submit(). El código de inhabilitación debería ejecutarse, luego pasará el clic que hará clic en el formulario.

+0

Si no coloca "this.form.submit()", el formulario no se enviará en este caso. – mchampaneri

1

Su pregunta es confusa y que realmente debe publicar algo de código, pero esto debería funcionar:

onClick="this.disabled=true; this.value='Sending...'; submitForm(); return false;" 

Creo que cuando se utiliza this.form.submit() que está haciendo lo que ocurre de manera natural cuando haces clic en el botón enviar. Si desea enviar la misma página, debe considerar el uso de AJAX en el método submitForm() (arriba).

Además, devolver false al final del valor de atributo onClick suprime el evento predeterminado de disparar (en este caso, enviar el formulario).

9

Los elementos de formularios HTML deshabilitados no se envían junto con los valores de publicación/obtención cuando envía el formulario. Por lo tanto, si inhabilita su botón de envío una vez que hace clic y el botón Enviar tiene el atributo name establecido, no se enviará en los valores de publicación/obtención ya que el elemento está ahora deshabilitado. Este es un comportamiento normal.

Uno de la manera de superar este problema está utilizando elementos de formulario ocultos.

+0

Esto funcionó mejor para mí, ¡gracias! – Josh

1

Si deshabilita el botón, su par nombre = valor no se enviará como parámetro. Pero el remanente de los parámetros debe enviarse (siempre que sus respectivos elementos de entrada y el formulario principal no estén deshabilitados). ¿Probablemente está probando el botón solamente o los otros campos de entrada o incluso el formulario están deshabilitados?

60

Usted debe primero presentar su formulario y cambie el valor de su confirmación:

onClick="this.form.submit(); this.disabled=true; this.value='Sending…'; " 
+4

Esta es la mejor respuesta. Algunos navegadores no saben enviar el formulario de antemano, y esta solución funciona alrededor de eso. – Nathanael

+4

onclick debe ser minúscula – MadMaardigan

+0

No funcionará como se espera si primero se activa la validación HTML5. – cyrotello

4

El truco está en retraso en el botón que se desactive, y enviar el formulario se puede utilizar window.setTimeout('this.disabled=true',0); sí, incluso con 0 MS está trabajando

+0

, pero ¿y si el usuario presiona el botón en esa fracción de tiempo? – jospratik

+0

¿Qué fracción? Funciona incluso con 0 –

3

usando jQuery, puede hacer esto ..

$("#submitbutton").click(
    function() { 
     alert("Sending..."); 
     window.location.replace("path to url"); 
    } 
); 
+0

Gracias colega – maas

1

Otra solución nos HE ed es mover el botón en lugar de deshabilitarlo. En ese caso, no tienes esos problemas de "desactivación". Finalmente, lo que realmente quieres es que la gente no presione dos veces, si el botón no está allí no pueden hacerlo.

También puede reemplazarlo por otro botón.

0

    A better trick, so you don't lose the value of the button is 

    function showwait() { 
    document.getElementById('WAIT').style['display']='inline'; 
    document.getElementById('BUTTONS').style['display']='none'; 
    } 

código de envoltura para mostrar en un div

estilo

id = WAIT = "display: none"> texto que se mostrará (div final)

código de envoltura para esconderse en un div

id = BUTTONS style = "display: inline"> ... botones o lo que sea que se oculte con
onclick = "showwait();" (div final)

1
function xxxx() { 
// submit or validate here , disable after that using below 
    document.getElementById('buttonId').disabled = 'disabled'; 
    document.getElementById('buttonId').disabled = ''; 
} 
0

En mi caso esto era necesario.

Disable submit button on form submit

Funciona bien en Internet Explorer y Firefox sin ella, pero que no funcionó en Google Chrome.

El problema es que está deshabilitando el botón antes de que pueda desencadenar el evento de envío.

+1

En general, es una buena práctica mostrar el código apropiado en su respuesta , en lugar de solo un enlace –

0

Aquí hay un ejemplo que se expande en la solución de Andreas Köberle. Se utiliza jQuery para el controlador de eventos y el evento ready documento, pero los que podría ser cambiado a llanura JS:

(function(document, $) { 

    $(function() { 
    $(document).on('click', '[disable-on-click], .disable-on-click', function() { 
     var disableText = this.getAttribute("data-disable-text") || 'Processing...'; 

     if(this.form) { 
     this.form.submit(); 
     } 

     this.disabled = true; 

     if(this.tagName === 'BUTTON') { 
     this.innerHTML = disableText; 
     } else if(this.tagName === 'INPUT') { 
     this.value = disableText; 
     } 
    }); 
    }); 

})(document, jQuery); 

A continuación, se puede utilizar en HTML así:

<button disable-on-click data-disable-text="Saving...">Click Me</button> 
<button class="disable-on-click">Click Me</button> 
<input type="submit" disable-on-click value="Click Me" /> 
5

probado en IE11, FF53, GC58:

onclick="var e=this;setTimeout(function(){e.disabled=true;},0);return true;" 
+0

Esto funcionó a diferencia de los demás. Probado en GC62. – TREMOR

0

creo manera fácil botón para desactivar es :data => { disable_with: "Saving.." } Esto presentará un formulario y luego hacer un bloqueo de botón, botón Además, no se desactivará i Si tiene validaciones como required = 'required'.

0

Lo hice. Cuando se establece el tiempo de espera, funciona perfectamente y envía todos los valores.

$(document).ready(function() { 
     document.getElementById('btnSendMail').onclick = function() { 
      setTimeout(function() { 
       document.getElementById('btnSendMail').value = 'Sending…'; 
       document.getElementById('btnSendMail').disabled = true; 
      }, 850); 
     } 
    }); 
Cuestiones relacionadas