Wie kann ich verhindern, dass die Seite aktualisiert wird, wenn Sie auf die Schaltfläche "Senden" klicken, ohne dass Daten in den Feldern vorhanden sind?
Die Validierung funktioniert einwandfrei, alle Felder werden rot, aber die Seite wird sofort aktualisiert. Meine Kenntnisse von JS sind relativ grundlegend.
Insbesondere denke ich, dass die processForm()
Funktion unten "schlecht" ist.
HTML
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
<button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
<div id="form_validation">
<span class="form_captcha_code"></span>
<input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
</div>
<div class="clearfix"></div>
</form>
JS
$(document).ready(function() {
// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });
///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {
// DEFINE GLOBAL VARIABLES
var valName = $('#form_name'),
valEmail = $("#form_email"),
valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
valMsg = $('#form_message'),
valCaptcha = $('#form_captcha'),
valCaptchaCode = $('.form_captcha_code');
// Generate captcha
function randomgen() {
var rannumber = "";
// Iterate through 1 to 9, 4 times
for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
// Apply captcha to element
valCaptchaCode.html(rannumber);
}
randomgen();
// CAPTCHA VALIDATION
valCaptcha.blur(function() {
function formCaptcha() {
if ( valCaptcha.val() == valCaptchaCode.html() ) {
// Incorrect
valCaptcha.parent().addClass("invalid");
return false;
} else {
// Correct
valCaptcha.parent().removeClass("invalid");
return true;
}
}
formCaptcha();
});
// Remove invalid class from captcha if typing
valCaptcha.keypress(function() {
valCaptcha.parent().removeClass("invalid");
});
// EMAIL VALIDATION (BLUR)
valEmail.blur(function() {
function formEmail() {
if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmail();
});
// Remove invalid class from email if typing
valEmail.keypress(function() {
valEmail.removeClass("invalid");
});
// VALIDATION ON SUBMIT
$('#prospects_form').submit(function() {
console.log('user hit send button');
// EMAIL VALIDATION (SUBMIT)
function formEmailSubmit() {
if (!valEmailFormat.test(valEmail.val())) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmailSubmit();
// Validate captcha
function formCaptchaSubmit() {
if( valCaptcha.val() === valCaptchaCode.html() ) {
// Captcha is correct
} else {
// Captcha is incorrect
valCaptcha.parent().addClass("invalid");
randomgen();
}
}
formCaptchaSubmit();
// If NAME field is empty
function formNameSubmit() {
if ( valName.val() === "" ) {
// Name is empty
valName.addClass("invalid");
} else {
valName.removeClass("invalid");
}
}
formNameSubmit();
// If MESSAGE field is empty
function formMessageSubmit() {
if ( valMsg.val() === "" ) {
// Name is empty
valMsg.addClass("invalid");
} else {
valMsg.removeClass("invalid");
}
}
formMessageSubmit();
// Submit form (if all good)
function processForm() {
if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
$("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
$("#form_send").attr("type", "submit");
return true;
} else if( !formEmailSubmit() ) {
valEmail.addClass("invalid");
return false;
} else if ( !formCaptchaSubmit() ) {
valCaptcha.parent().addClass("invalid");
return false;
} else if ( !formNameSubmit() ) {
valName.addClass("invalid");
return false;
} else if ( !formMessageSubmit() ) {
valMsg.addClass("invalid");
return false;
} else {
return false;
}
}
});
});
// END VALIDATION
/////////////////
});
javascript
jquery
html
forms
M_Willett
quelle
quelle
var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm);
Und ich habe anscheinend keine Ahnung, wie man einen Kommentar richtig formatiert.event.preventDefault();
Code für die Bearbeitung Ihres Formulars ein. Eine einzeilige Variante von dem, was ich in meinen anderen Kommentar eingefügt habe (im Grunde das gleiche wie die jQuery-Version), wäre:document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});
Es kann eine Möglichkeit geben, dies zu verkürzen (indem man es nicht verwendetaddEventListener()
, aber es scheint, dass diese Methoden im Allgemeinen verpönt sind auf.Fügen Sie diesen onsubmit = "return false" -Code hinzu:
Das hat es für mich behoben. Die von Ihnen angegebene onClick-Funktion wird weiterhin ausgeführt
quelle
Ersetzen Sie den Schaltflächentyp durch
button
:quelle
button type="submit"
er das Formular über die Schaltflächenaktion mit jQuery gesendet hat.Sie können diesen Code zum Senden von Formularen ohne Seitenaktualisierung verwenden. Ich habe das in meinem Projekt gemacht.
quelle
Eine gute Möglichkeit, das erneute Laden der Seite beim
return false
Senden mithilfe eines Formulars zu verhindern, besteht darin, das Attribut onsubmit hinzuzufügen.quelle
action='#'
action="#"
Sie es bitte nicht, da es nicht funktioniert und keine geeignete Lösung ist. Der Schlüssel ist eigentlichonsubmit="yourJsFunction();return false"
Dieses Problem wird komplexer, wenn Sie dem Benutzer zwei Möglichkeiten zum Senden des Formulars geben:
In einem solchen Fall benötigen Sie eine Funktion, die die gedrückte Taste erkennt, in der Sie das Formular senden, wenn die Eingabetaste gedrückt wurde.
Und jetzt kommt das Problem mit IE (auf jeden Fall Version 11). Anmerkung: Dieses Problem existiert weder mit Chrome noch mit FireFox!
Obwohl die Lösung trivial aussieht, habe ich viele Stunden gebraucht, um dieses Problem zu lösen, und ich hoffe, dass sie für andere Leute nützlich sein könnte. Diese Lösung wurde unter anderem erfolgreich auf IE (Version 11.0.9600.18426), FF (Version 40.03) und Chrome (Version 53.02785.143 m 64 Bit) getestet.
Der Quellcode HTML & js befindet sich im Snippet. Dort wird das Prinzip beschrieben. Warnung:
Wenn Sie mit diesem Problem konfrontiert sind, kopieren Sie einfach js-Code in Ihre Umgebung und passen Sie ihn an Ihren Kontext an.
quelle
Verwenden Sie in reinem Javascript:
e.preventDefault()
e.preventDefault()
wird in jquery verwendet, funktioniert aber in Javascript.quelle
Die meisten Leute würden das Senden des Formulars durch Aufrufen der
event.preventDefault()
Funktion verhindern.Eine andere Möglichkeit besteht darin, das onclick-Attribut der Schaltfläche zu entfernen und den Code einzugeben
processForm()
,.submit(function() {
dareturn false;
das Formular nicht gesendet wird . Stellen Sie außerdem sicher, dass dieformBlaSubmit()
Funktionen Boolesche Werte basierend auf der Gültigkeit für die Verwendung in zurückgebenprocessForm();
katsh
Die Antwort ist dieselbe, nur leichter zu verdauen.(Übrigens, ich bin neu im Stackoverflow. Geben Sie mir bitte eine Anleitung.)
quelle
return false;
Ereignis auch nichtevent.preventDefault(); event.stopPropagation();
Die beste Lösung ist, bei jedem Aufruf eine beliebige Funktion aufzurufen und danach false zurückzugeben.
quelle
Persönlich möchte ich das Formular beim Senden validieren und wenn es Fehler gibt, gebe ich einfach false zurück.
http://jsfiddle.net/dfyXY/
quelle
quelle
Wenn Sie Pure Javascript verwenden möchten, ist das folgende Snippet besser als alles andere.
Nehmen wir an :
HTML :
Hoffe so funktioniert es für dich !!
quelle
Ich habe nicht überprüft, wie es funktioniert. Sie können (dies) auch binden, damit es wie jquery ajaxForm funktioniert
benutze es wie:
Es gibt Knoten zurück, so dass Sie so etwas wie "Senden i" über dem obigen Beispiel tun können
Soweit es nicht perfekt ist, aber es funktioniert, sollten Sie die Fehlerbehandlung hinzufügen oder die Deaktivierungsbedingung entfernen
quelle
Verwenden Sie einfach "Javascript:" in Ihrem Aktionsattribut des Formulars, wenn Sie keine Aktion verwenden.
quelle
Manchmal e.preventDefault (); funktioniert dann Entwickler sind glücklich, aber manchmal nicht arbeiten dann Entwickler sind traurig, dann habe ich eine Lösung gefunden, warum manchmal nicht funktioniert
Der erste Code funktioniert manchmal
zweite Option, warum nicht arbeiten? Dies funktioniert nicht, da JQuery oder eine andere Javascript-Bibliothek nicht ordnungsgemäß geladen wird. Sie können in der Konsole überprüfen, ob alle JQuery- und Javascript-Dateien ordnungsgemäß geladen wurden oder nicht.
Dies löst mein Problem. Ich hoffe das wird hilfreich für dich sein.
quelle
Meiner Meinung nach versuchen die meisten Antworten, das auf Ihrer Frage gestellte Problem zu lösen, aber ich denke nicht, dass dies der beste Ansatz für Ihr Szenario ist.
A
.preventDefault()
aktualisiert die Seite tatsächlich nicht. Aber ich denke, dass ein einfachesrequire
Feld, das Sie mit Daten füllen möchten, Ihr Problem lösen würde.Beachten Sie das
require
am Ende jeweils hinzugefügte Taginput
. Das Ergebnis ist dasselbe: Die Seite wird nicht ohne Daten in den Feldern aktualisiert.quelle
Ich hoffe, dies ist die letzte Antwort