, der Code, den Sie nicht, weil this
vorgesehen funktioniert bezieht sich auf document
anstelle des input
Element.Sie müßten Ihren Code aktualisieren, um zu sein:
jQuery(function ($) { //aliasing document.ready shortcut, good practice
"use strict";
$('input').data('initial-value', $('input').val());
});
Natürlich, die wahrscheinlich nicht tun, was Sie wollen entweder, wie es jedes Eingabeelement gesetzt wird, den Anfangswert der zuerst zu speichern, Eingabeelement (.val()
gibt den Wert des ersten übereinstimmenden Elements zurück).
Also den Code zu aktualisieren, für jedes Element zu arbeiten, dann würden Sie verwenden:
jQuery(function ($) {
"use strict";
$('input').each(function() {
$(this).data('initial-value', $(this).val());
});
});
Aber dann müssen wir auf die Frage bekommen, warum Sie stört den Anfangswert des Elements zu speichern, an erster Stelle. Wenn jemand den Wert des Eingangselements mit $(someElement).val('new value');
ändert, kann die Eingabe, indem Sie seinen Wert zurückgesetzt werden, zurück zu ihm ist [value]
Attribut:
$(someElement).val($(someElement).attr('value'));
Wenn auf der anderen Seite, werden Sie den Wert der input
Einstellung Element mit $(someElement).attr('value', 'new value');
, machst du es falsch, und korrumpieren Ihre input
Zustand des Elements. reset
Schaltflächen basieren auf dem [value]
-Attribut, das den ursprünglichen Status beibehält, sodass beim Zurücksetzen eines form
die Eingänge in ihren ursprünglichen Zustand zurückversetzt werden können.
Sie auch erwähnt:
Das Problem ist, dass die oben nicht den Anfangswert des in einem Datenattribut input
Feld initial-value
speichert. Das Attribut wird nicht erstellt.
Wenn Sie .data()
verwenden ein Element für den Zugriff auf die Daten, wird es Informationen aus [data-*]
Attribute ziehen, wenn [data-*]
Attribute vorhanden sind. Dies ist ideal zum Initialisieren von Daten zu einem Element.
Wenn Sie .data(key, value)
verwenden, um Daten mit einem Element zu verknüpfen, wird der Wert als Eigenschaft für das Element gespeichert. Der Wert des Attributs wird nicht aktualisiert. Es gibt keine Möglichkeit, instanziierte Objekte wie new Foo
seriell zu deserialisieren, wie es ursprünglich war.
Wenn Sie überprüfen möchten, ob die Daten eines Objekts korrekt festgelegt wurden, können Sie nicht einfach den DOM-Inspektor verwenden. Sie müssen den Inhalt von .data()
für dieses bestimmte Element überprüfen.
For more information about the differences between .attr()
and .data()
, see my answer to this related question.
Wenn Sie jQuery 'data' Methode verwenden, ist es nicht den Attributwert aktualisieren, aber es * nicht * die Daten mit dem Element verknüpfen. [Siehe meine Antwort auf eine verwandte Frage für weitere Details] (http://stackoverflow.com/questions/7261619/jquery-data-vs-attr/7262427#7262427). – zzzzBov