Standard auf Formular verhindern jQuery senden


137

Was ist daran falsch?

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
Funktioniert hier gut . Können Sie weitere Informationen in Ihrer Frage veröffentlichen? Wenn Sie alert()im Submit-Handler sind, wird es aufgerufen? Wenn nicht, liegt möglicherweise ein Fehler in Ihrem Skript vor, der verhindert, dass der Ereignishandler korrekt verkabelt wird. Irgendwas in der Fehlerkonsole?
Stadt

3
Dieser Link ist intern und für uns nutzlos.
Steve Robbins

Möglicherweise wurde eine ältere Version zwischengespeichert. Scheint jetzt zu arbeiten.
Djreed

1
Liam

2
! Stellen Sie sicher, dass der Javascript-Code ausgeführt wird, nachdem DOM bereit ist.
Towry

Antworten:


173

Versuche dies:

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

12
Es funktioniert, aber warum funktioniert die bevorzugte Methode zur Verhinderung von Default nicht?
MikeJ

26
Siehe diese Frage für eine bessere Erklärung: stackoverflow.com/questions/1357118/…
Jordan Brown

8
Das ist die falsche Antwort. e.preventDefault()funktioniert gut mit einer Formularübermittlung, das Problem lag an anderer Stelle im OP-Code. Die Verwendung return false kann zu unbeabsichtigten Konsequenzen führen.
Chuck Le Butt

58

Verwenden Sie die neue Ereignissyntax "Ein".

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

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


2
Hallo. Das funktioniert bei mir nicht. (Ja, ich habe meinen Code eingegeben. $(document).ready()) Wie mache ich das?
Gui Imamura

1
@GuiImamura Benötigen Sie weitere Informationen. Haben Sie die gültige Variable auf trueoder gesetzt false? Können Sie Ihren Code in jsfiddle.net neu erstellen und den Link senden? Fügen Sie ein hinzu alert(), um zu bestätigen, dass die Funktion ausgelöst wird. Einige Leute haben berichtet, dass das Hinzufügen e.stopPropagation();nach dem e.preventDefault();Anhalten andere verkettete Ereignisse vom Feuern abhält.
Scarver2

Hallo, ich verwende $('#myFormID').validationEngine('validate')von jQuery validationEngine als Variable valid, um zu überprüfen, ob die Eingabe eine gültige E-Mail-Adresse ist. Trotzdem möchte ich, dass das Standardverhalten so oder so verhindert wird. muss preventDefaultsich innerhalb des if-Blocks befinden, nicht davor?
Gui Imamura

@GuiImamura Freut mich zu hören, dass du es zum Laufen gebracht hast. Das preventDefaultbefindet sich im nicht gültigen Block, um die Übermittlung des Formulars zu stoppen. Verwenden Sie mit anderen Worten, falls gültig , das Standardverhalten des Formulars.
Scarver2

13

Ich glaube, dass die obigen Antworten alle richtig sind, aber das zeigt nicht, warum die submitMethode nicht funktioniert.

Nun, die submitMethode funktioniert nicht, wenn jQuery das formElement nicht abrufen kann und jQuery keinen Fehler macht. Wenn Ihr Skript im Kopf des Dokuments platziert ist, stellen Sie sicher , dass der Code läuft nach DOMist bereit . Also, $(document).ready(function () { // your code here // });wird das Problem lösen.

Am besten platzieren Sie Ihr Skript immer am Ende des Dokuments.


11

Dies ist eine alte Frage, aber die hier akzeptierte Antwort geht dem Problem nicht wirklich auf den Grund.

Sie können diese beiden Möglichkeiten lösen. Zuerst mit jQuery:

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

     e.preventDefault();

  });
}

Oder ohne 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();

});

Sie müssen nicht verwenden return false, um dieses Problem zu lösen.


Ich habe den nativen js Event Listener anstelle des jquery Event Listeners ersetzt und es funktioniert. Danke für die Idee.
Orhan Gazi

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

Dies funktioniert perfekt für mich auf einer Seite, auf der ich ein clientseitiges Formular in einem serverseitigen Formular habe.
Liknes


2

Ihr Code ist in Ordnung, Sie müssen ihn nur in die Bereitschaftsfunktion einfügen.

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

Dieser Rat wird bereits durch andere Antworten gegeben. Bitte entfernen Sie diese Antwort, um das Aufblähen der Seite zu verringern. Sie können die anderen Antworten, die das gleiche Gefühl repräsentieren, positiv bewerten.
Mickmackusa

2

DEPRECATED - Dieser Teil ist veraltet, verwenden Sie ihn also nicht.

Sie können diesen Code auch ausprobieren, wenn Sie beispielsweise später dynamische Formulare hinzugefügt haben. Sie haben beispielsweise ein asynchrones Fenster mit Ajax geladen und möchten dieses Formular senden.

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

UPDATE - Sie sollten die Methode jQuery on () verwenden und versuchen, das Dokument-DOM anzuhören, wenn Sie dynamisch hinzugefügten Inhalt verarbeiten möchten.

Fall 1, statische Version: Wenn Sie nur wenige Listener haben und Ihr zu handhabendes Formular fest codiert ist, können Sie direkt auf "Dokumentebene" abhören. Ich würde die Listener nicht auf Dokumentebene verwenden, aber ich würde versuchen, tiefer in den Doom Tree einzusteigen, da dies zu Leistungsproblemen führen könnte (abhängig von der Größe Ihrer Website und Ihrem Inhalt).

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

ODER

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

Fall 2, dynamische Version: Wenn Sie das Dokument bereits in Ihrem Code anhören, ist dieser Weg gut für Sie. Dies funktioniert auch für Code, der später über DOM oder dynamisch mit AJAX hinzugefügt wurde.

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

ODER

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

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

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

ODER

$(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()ist seit jQuery 1.7 veraltet und seit 1.9 entfernt. Verwenden Sie .on()stattdessen.
Hank

0

Hallo suchte nach einer Lösung, um ein Ajax-Formular mit Google Tag Manager (GTM) zum Laufen zu bringen. Die Rückgabe false verhinderte den Abschluss und die Übermittlung der Aktivierung des Ereignisses in Echtzeit auf Google Analytics-Lösung bestand darin, die Rückgabe false durch e.preventDefault () zu ändern. ;; das richtig funktioniert folgt dem Code:

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

0

e.preventDefault () funktioniert nur dann einwandfrei, wenn Sie keine Probleme mit Ihren Javascripts haben. Überprüfen Sie Ihre Javascripts, wenn e.preventDefault () nicht funktioniert. Möglicherweise funktionieren auch einige andere Teile Ihres JS nicht


0

Nun, ich bin auf ein ähnliches Problem gestoßen. Das Problem für mich ist, dass die JS-Datei geladen wird, bevor das DOM-Rendering stattfindet. Bewegen Sie sich also <script>zum Ende des <body>Tags.

oder verwenden Sie aufschieben.

<script defer src="">

Seien Sie also versichert, e.preventDefault()dass es funktionieren sollte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.