2014-07-20 17 views
5

Ho una pagina molto semplice con un modulo che sto cercando di impedire di inviare con jQuery, ma il codice non funziona sorprendentemente. Qualche idea?PreventDefault non impedisce il modulo da inviare

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
     <script> 

      $("#searchForm").submit(function(e){ 
       e.preventDefault(); 
     }); 

    </script> 

</head> 
<body> 
    <form id="searchForm"> 
     <input name="q" placeholder="Go to a Website"> 
     <input type="submit" value="Search"> 
    </form> 
    <pre id="response"></pre> 
</body> 

risposta

5

È necessario avvolgere il codice in .ready() in modo che otterrebbe eseguito quando il DOM è pronto.

$(document).ready(function() { 
    $("#searchForm").submit(function(e){ 
     e.preventDefault(); 
    }); 
}); 
3

Il codice si trova nell'intestazione in modo che viene eseguito prima della <form> esiste ancora. Pertanto, il selettore #searchForm non corrisponde a nulla. Inserisci il tag dello script sotto il modulo.

+2

Essi possono anche fare la loro JavaScript viene eseguito fino a quando la pagina ha terminato il caricamento utilizzando l'ascoltatore evento 'DOMContentLoaded', non so cosa sia in jQuery però. Ma avere JavaScript nella parte inferiore della pagina è migliore poiché non blocca il rendering. – David

0
$(document).on('submit', function(e){ 
    e.preventDefault(); 
}); 
2

È necessario ritardare l'aggiunta della funzione evento-ascoltatore fino a quando il browser ha terminato il caricamento della pagina. Altrimenti quelle linee di JavaScript vengono eseguite prima dell'esistenza dell'elemento modulo, quindi la funzione non viene associata ad esso.

Wrap l'evento-ascoltatore in jQuery's .ready() method:

$(document).ready(function() { 
    $('#searchForm').submit(function(event) { 
    event.preventDefault(); 
    }); 
}); 
Problemi correlati