2013-02-15 11 views
5

Come funziona l'attributo value per il tag di input html dopo una modifica tramite la casella di input?Attributo del valore di input HTML - stesso input, (apparentemente) risultati diversi

esempio:

<input type="text" name="test" id="test" value="Hello world" /> 

questo mostrerà una casella di input con il testo "Ciao mondo". Se modifico che inputing una nuova stringa nella casella di testo reso (non tramite il codice grezzo), e poi cercare di ottenere il suo valore utilizzando js come questo

alert(document.getElementById('test').value) 

io, giustamente, ottenere il nuovo valore. Ma se controllo l'elemento tramite gli strumenti di sviluppo di Chrome (o firebug o qualsiasi cosa tu preferisca), vedrò la stessa stringa "Hello world" com'era all'inizio ..

Quale dei due è il giusto uno? valore di js o ispettore di cromo?

Ecco il Example Fiddle ed ecco uno screenshot enter image description here

sono arrivato fino a questo durante il tentativo di trovare una soluzione a questo problema: situazione negozio Classic, ho una tabella con tag input X, in cui un utente può inserire il quantità di X articoli. Devo controllare se uno o più valori sono cambiati rispetto al valore precedente di ciascun input: se il confronto tra OLD e NEW val restituisce che il valore è cambiato, devo aggiornare l'ordine. Altrimenti non è necessario salvare/aggiornare.

Pensavo di poter usare attr. "valore" per memorizzare il "vecchio" valore dell'input, ma probabilmente non era la scelta migliore ..

Qualcuno può spiegare questo comportamento? È solo un problema di "aggiornamento" o c'è qualcos'altro dietro?

risposta

8

Entrambi hanno ragione, mostrano solo cose diverse.

Il DOM valueproprietà ti dà il valore attuale .

Il codice HTML valueattributo ti dà il valore didi default (lo stesso del DOM defaultValueproprietà).

L'ispettore DOM di Chrome mostra i valori degli attributi nella visualizzazione HTML. Devi guardare la vista delle proprietà per vedere i valori delle proprietà.

Screen shot of Chrome property view

1

È possibile assegnare un cosiddetto attributo proprietaria all'ingresso; ad esempio "oldval" in modo da poterlo confrontare successivamente con il valore corrente

+3

Si potrebbe, ma perché preoccuparsi quando 'defaultValue' viene fornito gratuitamente? – Quentin

5

Puoi trovare informazioni in questo article.

il valore visualizzato in html è il valore predefinito con cui viene caricato il modulo. Se si desidera aggiornare anche il DOM, è necessario utilizzare ele.setAttribute ("valore", "nuovo valore")

Se si desidera sapere se un elemento è stato modificato, è preferibile allegare un evento onchange a gli elementi di input e contrassegnare qualche flag nel gestore modifiche per sapere se il modulo è stato modificato o meno.

+0

mmm l'onchange scatterà anche se inserisco lo stesso valore nella casella di input. Ho ragione? – BeNdErR

+0

Sì. È giusto. –

+0

Generalmente nelle nostre implementazioni, creiamo una semplice classe per la casella di input, dove inizializziamo con un certo valore. La classe sarà responsabile del rendering dell'elemento di input e ascolterà i suoi eventi e quando rileverà l'evento change, può controllare se il valore è effettivamente modificato mentre memorizza il valore inizializzato nella cache. Se ritieni che ciò stia complicando i tuoi requisiti, puoi mantenere una matrice o un elenco di valori, associarlo agli elementi di input e eseguire controlli in base al valore archiviato nell'array. In entrambi i casi avrete bisogno di qualche manipolazione js –

Problemi correlati