Gibt es in jQuery eine einfache Möglichkeit zu testen, ob sich eines der Elemente eines Formulars geändert hat?
EDIT: Ich hätte hinzufügen sollen, dass ich nur ein click()
Ereignis überprüfen muss .
EDIT: Sorry, ich hätte wirklich genauer sein sollen! Angenommen, ich habe ein Formular und eine Schaltfläche mit den folgenden Angaben:
$('#mybutton').click(function() {
// Here is where is need to test
if(/* FORM has changed */) {
// Do something
}
});
Wie würde ich testen, ob sich das Formular seit dem Laden geändert hat?
javascript
jquery
Mike
quelle
quelle
Antworten:
Du kannst das:
Diese Rigs eines
change
Event - Handler - Eingänge in Form, wenn einer von ihnen es ändern verwendet.data()
einen einstellenchanged
Werttrue
, dann überprüfen wir nur für diesen Wert auf dem Klick, das davon ausgeht , dass im#mybutton
Innern der Form (wenn nicht nur ersetzen$(this).closest('form')
mit$('#myForm')
), aber Sie könnten es noch allgemeiner machen, wie folgt:Referenzen: Aktualisiert
Laut jQuery ist dies ein Filter zur Auswahl aller Formularsteuerelemente.
http://api.jquery.com/input-selector/
quelle
$('form :input')
Konto für die Auswahl, Textarea und andere Eingabearten? oder ist es spezifisch für das Eingabe-Tag?Wenn Sie überprüfen möchten, ob sich die Formulardaten, die an den Server gesendet werden sollen, geändert haben, können Sie die Formulardaten beim Laden der Seite serialisieren und mit den aktuellen Formulardaten vergleichen:
quelle
Eine Echtzeit- und einfache Lösung:
quelle
'input'
statt'keyup change'
Einfügen mit der rechten Maustaste zu verwenden, es sei denn, Sie müssen ältere Browser unterstützen.Sie können mehrere Selektoren verwenden, um dem Änderungsereignis für jedes Formularelement einen Rückruf beizufügen.
BEARBEITEN
Da Sie erwähnt haben, dass Sie dies nur für einen Klick benötigen, können Sie meinen ursprünglichen Code einfach so ändern:
EDIT # 2
Ok, Sie können ein Global festlegen, das festgelegt wird, sobald etwas wie folgt geändert wurde:
quelle
Wenn Sie sich die aktualisierte Frage ansehen, versuchen Sie etwas wie
Verwenden Sie für die ursprüngliche Frage so etwas wie
quelle
<textarea>
oder<select>
Elemente.boolean
Set auf true, wenn eine Änderung eintritt. Dies ist auch immer noch nicht formularspezifisch. Was wäre, wenn die Seite andere Formulare enthalten würde?quelle
Hier ist eine elegante Lösung.
Für jedes Eingabeelement im Formular gibt es eine versteckte Eigenschaft, mit der Sie bestimmen können, ob der Wert geändert wurde oder nicht. Jeder Eingabetyp hat einen eigenen Eigenschaftsnamen. Beispielsweise
text/textarea
es ist defaultValueselect
es ist defaultSelectcheckbox/radio
es ist defaultCheckedHier ist das Beispiel.
Durchlaufen Sie jetzt einfach die Formulare auf der Seite und Sie sollten sehen, dass die Senden-Schaltflächen standardmäßig deaktiviert sind. Sie werden NUR aktiviert, wenn Sie tatsächlich einen Eingabewert im Formular ändern.
Die Implementierung als
jQuery
Plugin finden Sie hier https://github.com/kulbida/jmodifyingquelle
quelle
Sie benötigen das Plugin jQuery Form Observe . Das ist was Sie suchen.
quelle
Wenn Sie die Antwort von Udi erweitern, wird nur die Formularübermittlung überprüft, nicht jede Eingabeänderung.
quelle
Zuerst würde ich Ihrem Formular eine versteckte Eingabe hinzufügen, um den Status des Formulars zu verfolgen. Dann würde ich dieses jQuery-Snippet verwenden, um den Wert der versteckten Eingabe festzulegen, wenn sich etwas im Formular ändert:
Wenn Sie auf Ihre Schaltfläche klicken, können Sie den Status Ihrer versteckten Eingabe überprüfen:
quelle
Zusätzlich zu der obigen Antwort von @ JoeD.
Wenn Sie Felder in einem bestimmten Formular (vorausgesetzt, es gibt mehr als ein Formular) als nur Felder als Ziel festlegen möchten, können Sie den folgenden Code verwenden:
quelle
$('form').find('input,select')
$.fn.find
schneller als gerade$.fn.filter
auf untergeordnete Elemente zu verweisen, als absteigende Selektoren zu verwenden. vaughnroyko.com/the-real-scoop-on-jquery-find-performanceVersuche dies:
quelle