2010-03-30 21 views
14

Tengo un problema cuando intento enviar el formulario haciendo clic en el botón enviar, lleva un tiempo publicar la solicitud durante este si vuelvo a hacer clic en el botón Enviar, volverá a enviar todos los parámetros y se guardarán los parámetros. dos veces, tres veces ... etc.¿Cómo enviar el formulario una sola vez después de hacer clic múltiple en enviar?

No sé cómo limitar el botón Enviar para que el formulario no se envíe dos veces. Creo que cuando hice clic en Enviar, tengo que deshabilitar el botón de enviar para que el usuario no pueda volver a hacer clic, ¿es correcto hacerlo?

Respuesta

26
<input type="submit" onclick="this.disabled = true" value="Save"/> 
+0

buena solución. :) – Plynx

+0

Wonderfullly directo. –

+1

Este método no funciona en Chrome 16 –

4

I love the simplicity and directness of Zoidberg's answer.

Pero si desea conectar el manejador del uso de código en lugar de marcado (algunas personas prefieren mantener el marcado y el código completamente separados), aquí se está utilizando Prototype:

document.observe('dom:loaded', pageLoad); 
function pageLoad() { 
    var btn; 

    btn = $('idOfButton'); // Or using other ways to get the button reference 
    btn.observe('click', disableOnClick); 
} 
function disableOnClick() { 
    this.disabled = true; 
} 

o usted podría utilizar funciones anónimas (no soy un fan de ellos):

document.observe('dom:loaded', function() { 
    var btn; 

    btn = $('idOfButton'); // Or using other ways to get the button reference 
    btn.observe('click', function() { 
     this.disabled = true; 
    }); 
}); 

Hacerlo usando jQuery se verá muy similar.

+1

Buena respuesta, las opciones múltiples siempre son buenas, especialmente cuando se trata de una biblioteca sólida. – Zoidberg

30

Desactivar el botón es una solución, pero puede ser un problema para los usuarios de teclado que simplemente pulsan enter para enviar un formulario. En este escenario, el botón no se desactivará. El método infalible sería para controlar el evento onsubmit así:

(function() { 
    var allowSubmit = true; 
    frm.onsubmit = function() { 
     if (allowSubmit) 
      allowSubmit = false; 
     else 
      return false; 
    } 
})(); 

(así, como más segura de que se puede obtener con JS activado de todos modos). Podría desactivar el botón como una confirmación visual para el usuario final de que el formulario solo puede enviarse una vez.

+6

Cierto, supongo que si alguien puede presionar el mouse espasmódicamente, también pueden presionar espasticamente el botón enter – Zoidberg

+1

Muy correcto. También es bueno mostrar un mensaje de que se está enviando la información (por ejemplo, al lado del botón de enviar después de haber sido desactivado). –

0

Sé que esto es viejo, pero en lugar de desactivar, simplemente ocultar el botón, no se puede hacer clic lo que no puede ver.

<input type="submit" onclick="this.style.visibility = 'hidden'" value="Save"/> 
+0

El problema con esto es que lo hace invisible sin importar qué, incluso si hay una validación de formulario, el botón desaparece: p – jQwierdy

0

si está presente forma de uso/post en PHP a continuación, utilizar el código

onclick="disableMe();" in type="submit" 

su código botón de enviar

<input name="bt2" type="submit" onclick="disableMe();" id="bt2" style="width:50px;height:30px; margin-left:30px;" value="Select" /> 
Cuestiones relacionadas