Per cominciare, il codice che hai fornito non funzionerà perché si riferisce a this
document
invece dell'elemento input
.Avresti bisogno di aggiornare il codice per essere:
jQuery(function ($) { //aliasing document.ready shortcut, good practice
"use strict";
$('input').data('initial-value', $('input').val());
});
Naturalmente, che probabilmente non fare quello che vuoi o, come si imposterà ogni elemento ingresso per memorizzare il valore iniziale del prima L'elemento di input (.val()
restituisce il valore del primo elemento con corrispondenza).
Quindi, per aggiornare il codice di lavorare per ogni elemento, utilizza:
jQuery(function ($) {
"use strict";
$('input').each(function() {
$(this).data('initial-value', $(this).val());
});
});
Ma poi abbiamo bisogno di entrare nella questione del perché si sta preoccuparsi di memorizzare il valore iniziale dell'elemento innanzitutto. Se qualcuno cambia il valore dell'elemento di input con $(someElement).val('new value');
, l'ingresso può essere azzerato impostando il suo valore di nuovo esso è [value]
attributo:
$(someElement).val($(someElement).attr('value'));
Se, d'altra parte, si sta impostando il valore della input
elemento con $(someElement).attr('value', 'new value');
, stai sbagliando e stai corrompendo lo stato dell'elemento input
. I pulsanti reset
si basano sull'attributo [value]
preservando lo stato originale in modo che quando viene ripristinato uno form
, gli input possano essere riportati allo stato originale.
È inoltre menzionati:
Il problema è che quanto sopra non memorizzare il valore iniziale del campo input
in un attributo di dati initial-value
. L'attributo non è stato creato.
Quando si utilizza .data()
per accedere ai dati su un elemento, tirerà le informazioni da [data-*]
attributi se [data-*]
attributi sono presenti. Questo è ottimo per inizializzare i dati su un elemento.
Quando si utilizza .data(key, value)
per associare i dati con un elemento, sarà memorizzare il valore come una proprietà sull'elemento; Non aggiornerà il valore dell'attributo. Non esiste un modo per serializzare oggetti istanziati come new Foo
in modo che possa essere deserializzato nel modo in cui era originariamente.
Se si desidera verificare che i dati di un oggetto siano stati impostati correttamente, non è possibile utilizzare semplicemente l'ispettore DOM, è necessario verificare effettivamente il contenuto di .data()
per quel particolare elemento.
For more information about the differences between .attr()
and .data()
, see my answer to this related question.
Quando si utilizza 'data' metodo di jQuery, non aggiorna il valore di attributo, ma * non * associare i dati con l'elemento. [Vedi la mia risposta a una domanda correlata per maggiori dettagli] (http://stackoverflow.com/questions/7261619/jquery-data-vs-attr/7262427#7262427). – zzzzBov