2013-12-07 23 views
10

Mi sono imbattuto in questo modo dopo aver completato il sito Web poiché dovevo implementare la cronologia in una pagina basata su Ajax (che richiede di aggiornare determinati luoghi con html (che include moduli con testo semplice input - il problema è questo: non ottengono i loro valori assegnati, perché hanno i loro valori impostati da val() e non da attr() - bugie)). Sto destinato a dover sostituire tutti javascript daPerché la funzione jQuery val() non aggiorna l'attributo 'valore'?

$('#xxx').val('someValue'); 

a

$('#xxx').attr('value', 'someValue'); 

o c'è qualche speranza di bypassare questo?

Un esempio piuttosto banale here. Come puoi vedere nella finestra di dialogo, il valore attributo non è impostato nel codice html.

+0

Quale elemento HTML hai a che fare? Un input o qualcosa di diverso (come una textarea)? –

+0

Sì, semplici input di testo. –

+0

@AlexeiLevenkov aggiornato con l'esempio. –

risposta

15

Esso utilizza sottostante nativo element.value = 'someValue' che ovviamente imposta il valore struttura dell'elemento

element.property_to_set = 'new_value'; 

quindi non cambia l'attributo, che sarebbe

element.setAttribute('value', 'someValue') 

che è quello attr() esegue internamente, mentre prop() modifica la proprietà, proprio come val().
Il motivo per cui cambia la proprietà, è che la proprietà è ciò che viene utilizzato in un modulo di invio, ed è normalmente ciò che viene utilizzato per ottenere il valore anche in javascript, quindi ha senso attenersi alla proprietà e non al attributo, dato che l'attributo è normalmente usato per impostare il valore iniziale della proprietà, e cambiando l'attributo in seguito con javascript non aggiorna la proprietà, che sarebbe il problema opposto a quello che si sta avendo, e interesserebbe tutto modulo invia ed è un grosso problema.

+0

Penso di capire ora cosa fa attr/val/prop, ma come posso cambiare il mio codice? Dal momento che ho bisogno di catturare il codice html e applicarlo di nuovo quando necessario. Attualmente i miei valori scompaiono :( –

+0

Btw, perché si comporta in modo diverso se l'input è di 'type =" hidden "'? –

+0

È sempre possibile riscrivere il metodo val() per modificare l'attributo e la proprietà e aggiungerlo dopo jQuery ma prima del tuo script, in questo modo funzionerebbe come è, ecco come lo faresti -> http://jsfiddle.net/kZsdm/ – adeneo