2012-02-19 16 views
97

Come si impedisce a un modulo di inviarlo utilizzando jquery?Utilizzo di JQuery - impedimento del modulo dall'invio

Ho provato di tutto - vedere 3 diverse opzioni che ho provato qui di seguito, ma tutto non funzionerà:

$(document).ready(function() { 

      //option A 
      $("#form").submit(function(e){ 
       e.preventDefault(); 
      }); 

      //option B 
      $("#form").submit(function(e){ 
       stopEvent(e); 
      }); 

      //option C 
      $("#form").submit(function(){ 
       return false; 
      }); 
    }); 

Cosa potrebbe esserci di sbagliato?

Update - ecco il mio html:

<form id="form" class="form" action="page2.php" method="post"> 
     <!-- tags in the form --> 
     <p class="class2"> 
      <input type="submit" value="Okay!" /> 
     </p> 
    </form> 

qualcosa che non va qui?

+0

Mostra il codice HTML perché non v'è niente di sbagliato con preventDefault o return false come hai postato, a parte il tuo selettore che si sbaglia completamente. – Sparky

+0

'return false;' dopo che '.submit()' ha funzionato per me! Ho avuto lo stesso problema –

risposta

141

due cose spiccano:

  • E 'possibile che il nome di modulo non è form. Piuttosto, fai riferimento a tag lasciando cadere il #.
  • Anche la e.preventDefault è la sintassi JQuery corretta, ad es.

    //option A 
        $("form").submit(function(e){ 
         e.preventDefault(); 
        }); 
    

Opzione C dovrebbe anche funzionare. Non ho familiarità con l'opzione B

Un esempio completo:

<html> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

     <script type='text/javascript'> 
     $(document).ready(function() { 
      //option A 
      $("form").submit(function(e){ 
       alert('submit intercepted'); 
       e.preventDefault(e); 
      }); 
     }); 
     </script> 
    </head> 

    <body> 
     <form action="http://google.com" method="GET"> 
      Search <input type='text' name='q' /> 
      <input type='submit'/> 
     </form> 
    </body> 
</html> 
+1

ho provato, ancora submiting forma ... :( –

+2

Qualcos'altro è sbagliato. Sto usando questa tecnica su base giornaliera. La migliore ipotesi sarebbe che ci sono errori JavaScript nella pagina, forse controllare ? con firebug –

+0

non vedo eventuali errori nel firebug :( –

10

Per prevant default/prevenire modulo di presentazione utilizzare

e.preventDefault(); 

Per interrompere la manifestazione bubling uso

e.stopPropagation(); 

Per prevenire la presentazione del modulo 'return false' dovrebbe funzionare anche.

+0

ho provato, ancora di essere presentati ... –

+3

ciò che è bubling? –

+0

Vedere questa risposta perché jQuery gestisce questi in modo diverso. http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false – Sparky

0

$("#form') cerca un elemento con id="form".

$('form') guarda per l'elemento modulo

3

Ho anche avuto lo stesso problema. Ho anche provato ciò che avevi provato. Quindi cambio il mio metodo per non usare jquery ma usando l'attributo "onsubmit" nel tag form.

<form onsubmit="thefunction(); return false;"> 

Funziona.

Ma, quando ho provato a mettere il valore di ritorno falso solo in "thefunction()", non impedisce il processo di invio, quindi devo mettere "return false;" in attributo onsubmit. Quindi, concludo che la mia domanda di modulo non può ottenere il valore di ritorno dalla funzione Javascript. Non ne ho idea.

14

Probabilmente hai poche forme della pagina e usa $ ('form'). Submit() aggiunge questo evento alla prima occorrenza del modulo sulla tua pagina.Utilizzare selettore di classe, invece, o provate questo:

$('form').each(function(){ 
    $(this).submit(function(){ 
     e.preventDefault(); 
     alert('it works!'); 
     return false; 
    }) 
}) 

o meglio la versione di esso:

$(document).on("submit", "form", function(e){ 
    e.preventDefault(); 
    alert('it works!'); 
    return false; 
}); 
+1

Nel mio caso, restituire false era una chiave – artificis

0

si dimentica il form id, e funziona

$('form#form').submit(function(e){ 
    e.preventDefault(); 
    alert('prevent submit');    
}); 
2

Ho avuto lo stesso problema e ho risolto in questo modo (non elegante ma funziona):

$('#form').attr('onsubmit','return false;'); 
.210

E ha il vantaggio, a mio parere, che è possibile ripristinare la situazione ogni volta che vuoi:

$('#form').attr('onsubmit','return true;'); 
+0

Forse sarebbe un po 'più comodo rimuovere semplicemente l'attributo quando si ripristina il form submit prevention '$ (' # form '). RemoveAttr (' onsubmit ') ; ' – barbieswimcrew

0

Quando sto usando <form> tag senza l'attributo id="form" e chiamarlo con il suo nome tag direttamente in jQuery funziona con me.
il codice in file html:

<form action="page2.php" method="post"> 

e nello script Jquery:

$(document).ready(function() { 
     $('form').submit(function(evt){ 
      evt.preventDefault();// to stop form submitting 
     }); 
}); 
Problemi correlati