Es gibt ein paar Dinge, die Sie beachten sollten.
1. Es gibt mehrere Möglichkeiten, ein Formular einzureichen
- über die Schaltfläche "Absenden
- durch Drücken der Eingabetaste
- durch Auslösen eines Submit-Ereignisses in JavaScript
- möglicherweise mehr, je nach Gerät oder künftigem Gerät.
Wir sollten uns daher an die Formular-Absende-Ereignis und nicht das Schaltflächenklick-Ereignis. Dadurch wird sichergestellt, dass unser Code auf allen Geräten und unterstützenden Technologien jetzt und in Zukunft funktioniert.
2. Hijax
Der Benutzer hat möglicherweise JavaScript nicht aktiviert. A hijax Muster ist hier gut, wo wir sanft die Kontrolle über das Formular mit JavaScript, aber lassen Sie es submittable, wenn JavaScript fehlschlägt.
Wir sollten die URL und die Methode aus dem Formular ziehen, damit wir bei einer Änderung des HTML-Code das JavaScript nicht aktualisieren müssen.
3. Unaufdringliches JavaScript
Verwendung von event.preventDefault() 代わりに return false ist eine gute Praxis, da sie das Ereignis in die Höhe schnellen lässt. Dadurch können andere Skripte mit dem Ereignis verknüpft werden, z. B. Analyseskripte, die Benutzerinteraktionen überwachen können.
Geschwindigkeit
Idealerweise sollten wir ein externes Skript verwenden, anstatt unser Skript inline einzufügen. Wir können einen Link zu diesem Skript im Kopfbereich der Seite mit einem Skript-Tag einfügen oder es am Ende der Seite verlinken, um die Geschwindigkeit zu erhöhen. Das Skript sollte die Benutzerfreundlichkeit erhöhen und nicht im Weg stehen.
Code
Angenommen, Sie sind mit all dem oben genannten einverstanden, und Sie möchten das Submit-Ereignis abfangen und es über AJAX (ein Hijax-Muster) behandeln, könnten Sie etwas wie folgt tun:
$(function() {
$('form.my_form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
Sie können die Übermittlung eines Formulars manuell über JavaScript auslösen, wann immer Sie wollen, z. B. mit
$(function() {
$('form.my_form').trigger('submit');
});
Editar:
Ich musste dies kürzlich tun und habe ein Plugin geschrieben.
(function($) {
$.fn.autosubmit = function() {
this.submit(function(event) {
event.preventDefault();
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
return this;
}
})(jQuery)
Fügen Sie ein data-autosubmit-Attribut zu Ihrem Formular-Tag hinzu, und Sie können dies dann tun:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});