Disabilita modulo invio automatico al clic sul pulsante


180

Ho un modulo HTML in cui utilizzo diversi pulsanti. Il problema è che, indipendentemente dal pulsante su cui faccio clic, il modulo verrà inviato anche se il pulsante non è di tipo "invia". es. pulsanti come:, <button>Click to do something</button>comportano l'invio del modulo.

È abbastanza doloroso fare uno e.preventDefault()per ognuno di questi pulsanti.

Uso l'interfaccia utente di jQuery e jQuery e il sito Web è in HTML5.

C'è un modo per disabilitare questo comportamento automatico?

Risposte:


460

I pulsanti come <button>Click to do something</button> sono pulsanti di invio.

Imposta type="button"per cambiarlo. type="submit"è l'impostazione predefinita (come specificato dalla raccomandazione HTML ).


24
perso un giorno di sonno riparando invano il mio codice perché non conoscevo questa semplice specifica!
Palerdot,

4
Facendo eco all'idea di Palerdot, sono contento di aver trovato questa nota dopo una rapida ricerca su Google e di non aver ucciso ore. Lo so, grazie mille.
brooklynsweb,

2
@NiketJoshi - Questa affermazione non sembra avere nulla a che fare con la domanda a cui risponde. Se hai una nuova domanda, fai una domanda ma assicurati di fornire una chiara dichiarazione del problema e un esempio riproducibile minimo .
Quentin,

19

Potresti semplicemente provare a utilizzare return false (return false sovrascrive il comportamento predefinito su ogni elemento DOM) in questo modo:

myform.onsubmit = function ()
{ 
  // do what you want
  return false
}

e quindi inviare il modulo utilizzando myform.submit ()

o in alternativa:

mybutton.onclick = function () 
{
   // do what you want
   return false
}

Inoltre, se si utilizza type="button"il modulo non verrà inviato.


8

<button>sono infatti pulsanti di invio, non hanno altre funzionalità principali. Dovrai impostare il tipo su pulsante.
Ma se leghi il tuo gestore eventi come di seguito, scegli come target tutti i pulsanti e non devi farlo manualmente per ogni pulsante!

$('form button').on("click",function(e){
    e.preventDefault();
});

Lo è e.preventDefault();.
hlcs,

0

se si desidera aggiungere direttamente all'input come attributo, utilizzare questo

 onclick="return false;" 

<input id = "btnPlay" type="button" onclick="return false;" value="play" /> 

questo impedirà il comportamento di invio dei moduli


0

un altro:

if(this.checkValidity() == false) {

                $(this).addClass('was-validated');
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();

                return false;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.