2011-01-29 25 views

risposta

80

.val() opere chiare su tutti gli elementi di tipo di ingresso in modo utile, tra cui <select> ... anche nei casi di <select multiple>, caselle di controllo e pulsanti di opzione (in cui .val() Ottiene o imposta un array di valori selezionati non solo una stringa).

Quindi in pratica servono a scopi diversi, anche se lo .attr('value') si comporta allo stesso modo in alcune situazioni, come le caselle di testo. Il metodo preferito è .val() per ottenere un comportamento coerente ovunque.


Solo per i calci, ecco un esempio meno noto per le caselle di controllo che fa .val() a portata di mano:

<input name="mytest" type="checkbox" value="1"> 
<input name="mytest" type="checkbox" value="2"> 
<input name="mytest" type="checkbox" value="3"> 
<input name="mytest" type="checkbox" value="4"> 

Si può fare questo:

$("input[name='mytest']").val([1, 2, 3]); 

.... che controllerà le prime 3 scatole. You can give it a try here.

+1

Grazie per l'esempio meno noto. – ScottE

+1

Ben scritto! Potresti voler aggiungere una breve espulsione sulla normalizzazione cross-browser che jQuery esegue con metodi come questo. – mekwall

+11

Nota anche che '.attr ('valore')' legge il valore originale, non lo stato presente. [Vedi anche.] (Http://stackoverflow.com/questions/8312820/jquery-obj-val-vs-obj-attrvalue) – XML

9

Anche .attr ('valore') restituisce il valore che era prima della modifica del campo di input. And .val() restituisce il valore corrente.

+0

Grazie. Ha senso. – Vikram

1

Per aggiungere alla risposta di Actis ...

anche .attr ('valore') restituisce il valore che è stato prima di modificare ingresso campo. And .val() restituisce il valore corrente.

Quando si lavora con un campo di immissione testo, i metodi di settaggio di .attr() e .val() funzionano in modo diverso.

.val('newval') 

imposterà il valore visualizzato dall'utente sulla pagina e aggiornerà il valore restituito dalle chiamate di metodo successive .val(). Non imposterà il valore = attributo dell'elemento.

OTOH

.attr('value','newval') 

fissa il valore = attributo dell'elemento. Se l'utente non ha digitato e non è stato chiamato .val (newval), allora anche questo aggiornerà visivamente il controllo e aggiornerà il valore restituito da .val().

È possibile approfondire con il seguente jsfiddle:

https://jsfiddle.net/jasonnet/vamLww2k/

Buona fortuna.

Problemi correlati