Impedisci impostazione predefinita su modulo Invia jQuery


138

Cosa c'è di sbagliato in questo?

HTML:

<form action="http://localhost:8888/bevbros/index.php/test" method="post" accept-charset="utf-8" id="cpa-form" class="forms">        
      <input type="text" name="zip" value="Zip code" id="Zip" class="required valid">      
      <input type="submit" name="Next" value="Submit" class="forms" id="1">
  </form>

jQuery:

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });

12
Funziona bene qui . Puoi pubblicare ulteriori informazioni nella tua domanda? Se alert()nel gestore di invio viene chiamato? In caso contrario, è possibile che ci sia un errore nello script che impedisce al gestore eventi di essere cablato correttamente. Qualcosa nella console degli errori?
Città

3
Tale collegamento è interno e non ci è utile.
Steve Robbins,

Forse una versione precedente è stata memorizzata nella cache. Sembra funzionare ora.
djreed


2
! Assicurati che il codice javascript venga eseguito dopo che DOM è pronto.
rimorchiato il

Risposte:


175

Prova questo:

$("#cpa-form").submit(function(e){
    return false;
});

12
Funziona, ma perché il metodo preferito di preventDefault non funziona?
MikeJ,

26
Vedi questa domanda per una spiegazione migliore: stackoverflow.com/questions/1357118/…
Jordan Brown

8
Questa è la risposta sbagliata e.preventDefault()funziona bene con l'invio di un modulo, il problema risiede altrove nel codice del PO. L'uso return false potrebbe comportare conseguenze indesiderate.
Chuck Le Butt,

58

Utilizzare la nuova sintassi dell'evento "on".

$(document).ready(function() {
  $('form').on('submit', function(e){
    // validation code here
    if(!valid) {
      e.preventDefault();
    }
  });
});

Cita: https://api.jquery.com/on/


2
Ciao. Questo non funziona per me. (sì, ho inserito il mio codice $(document).ready()) Come faccio a farlo funzionare?
Gui Imamura,

1
@GuiImamura Hai bisogno di maggiori informazioni. Hai impostato la variabile valida su trueo false? Puoi ricreare il tuo codice in jsfiddle.net e inviare il link? Prova ad aggiungere un alert()per confermare che la funzione è attiva. Alcune persone hanno riferito che l'aggiunta e.stopPropagation();dopo e.preventDefault();interrompe l'attivazione di altri eventi concatenati.
scarver2,

Ciao, sto usando $('#myFormID').validationEngine('validate')da jQuery validation Engine come variabile valid, per verificare se l'input è un indirizzo e-mail valido. Tuttavia, lo voglio per impedire il comportamento predefinito in entrambi i casi; non preventDefaultdeve essere all'interno del blocco if, non prima?
Gui Imamura,

@GuiImamura Sono contento di sentire che hai funzionato. La preventDefaultsi trova all'interno del se non valida blocco per fermare la presentazione del modulo. In altre parole, se valido , utilizzare il comportamento predefinito del modulo.
scarver2,

13

Credo che le risposte di cui sopra siano tutte corrette, ma ciò non indica perché il submitmetodo non funziona.

Bene, il submitmetodo non funzionerà se jQuery non è in grado di ottenere l' formelemento e jQuery non fornisce alcun errore al riguardo. Se lo script è inserito nella parte superiore del documento, assicurarsi che il codice eseguito dopo DOMsia pronto . Quindi, $(document).ready(function () { // your code here // });risolverà il problema.

La migliore pratica è, metti sempre la tua sceneggiatura in fondo al documento.


11

Questa è una domanda antica, ma la risposta accettata qui non arriva davvero alla radice del problema.

Puoi risolvere questo in due modi. Innanzitutto con jQuery:

$(document).ready( function() { // Wait until document is fully parsed
  $("#cpa-form").on('submit', function(e){

     e.preventDefault();

  });
}

O senza jQuery:

// Gets a reference to the form element
var form = document.getElementById('cpa-form');

// Adds a listener for the "submit" event.
form.addEventListener('submit', function(e) {

  e.preventDefault();

});

Non è necessario utilizzare return falseper risolvere questo problema.


Ho sostituito il listener di eventi js nativo invece del listener di eventi jquery ed è funzionante. grazie per l'idea.
Orhan Gazi,

6
$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});

Questo funziona perfettamente per me su una pagina in cui ho un modulo lato client all'interno di un modulo lato server.
Liknes,


2

Il tuo codice va bene, devi solo inserirlo nella funzione Pronto.

$(document).ready( function() {
  $("#cpa-form").submit(function(e){
     e.preventDefault();
  });
}

Questo consiglio è già fornito da altre risposte. Rimuovi questa risposta per ridurre il gonfiamento della pagina. Puoi votare le altre risposte che rappresentano lo stesso sentimento.
Mickmackusa,

2

DEPRECATO - questa parte è obsoleta, quindi per favore non usarla.

Puoi anche provare questo codice, se ad esempio hai aggiunto moduli dinamici in seguito. Ad esempio hai caricato una finestra asincrona con ajax e vuoi inviare questo modulo.

$('#cpa-form').live('submit' ,function(e){
    e.preventDefault();      
    // do something
});

AGGIORNAMENTO : è necessario utilizzare il metodo jQuery on () e provare ad ascoltare il documento DOM se si desidera gestire il contenuto aggiunto dinamicamente.

Caso 1, versione statica: se hai solo pochi ascoltatori e il tuo modulo da gestire è hardcoded, puoi ascoltare direttamente a "livello di documento". Non userei gli ascoltatori a livello di documento ma proverei ad approfondire l'albero del destino perché potrebbe portare a problemi di prestazioni (dipende dalle dimensioni del tuo sito Web e dai tuoi contenuti)

$('form#formToHandle').on('submit'... 

O

$('form#formToHandle').submit(function(e) {
    e.preventDefault();      
    // do something
});

Caso 2, versione dinamica: se ascolti già il documento nel tuo codice, in questo modo andrebbe bene per te. Questo funzionerà anche per il codice che è stato aggiunto in seguito tramite DOM o dinamico con AJAX.

$(document).on('submit','form#formToHandle',function(){
   // do something like e.preventDefault(); 
});

O

$(document).ready(function() {
    console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

O

$(function() { // <- this is shorthand version
   console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

7
.live()è obsoleto da jQuery 1.7 e rimosso da 1.9. Usa .on()invece.
Hank,

0

Hello ha cercato una soluzione per far funzionare un modulo Ajax con Google Tag Manager (GTM), il reso false ha impedito il completamento e inviare l'attivazione dell'evento in tempo reale sulla soluzione di analisi di google è stato quello di modificare il reso falso da e.preventDefault () ; che ha funzionato correttamente segue il codice:

 $("#Contact-Form").submit(function(e) {
    e.preventDefault();
   ...
});

0

e.preventDefault () funziona bene solo se non hai problemi sui tuoi javascripts, controlla i tuoi javascripts se e.preventDefault () non funziona è probabile che alcune altre parti del tuo JS non funzionino anche


0

Bene ho riscontrato un problema simile. Il problema per me è che il file JS viene caricato prima che avvenga il rendering DOM. Quindi sposta il tuo <script>alla fine di<body> tag.

o usa il differimento.

<script defer src="">

quindi stai tranquillo e.preventDefault()dovrebbe funzionare.

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.