2015-08-06 17 views
5

Per quanto ne so, la funzione .prop() può fare tutto ciò che la funzione .attr() può fare, ma in un modo generalmente più sicuro e semplice.C'è qualche situazione in cui devo usare .attr() su .prop()?

Ad esempio:

  • Se voglio ottenere lo stato di default di una casella di controllo nel codice HTML, che posso fare $('myCheckbox').prop('defaultChecked') (invece di $('myCheckbox').attr('checked')). Questo sembra realmente più sicuro che usare .attr('checked'), come l'attributo può perdere il suo valore, se la casella di controllo viene modificata dinamicamente, mentre .prop('defaultValue') mantiene il valore (ad esempio http://jsfiddle.net/p1Lrgwnb/1/)
  • Anche se vedo spesso .attr() utilizzato in modo coerente con i valori come id e name su esempi StackOverflow, .prop() funziona anche con quelli. Non conosco alcun motivo per cui .attr() sembra essere preferito per questi valori oltre alle convenzioni e abitudini tradizionali.

C'è mai stato un caso d'uso in cui avrei bisogno di utilizzare .attr() o che la funzione .prop() non mi avrebbe dato le informazioni di cui avevo bisogno?

EDIT: Questa domanda non ha nulla a che fare con ciò che è la differenza tra .prop() e .attr(). Ho studiato a fondo queste domande su StackOverflow, incluso quello collegato sotto (stackoverflow.com/questions/5874652/prop-vs-attr). Dalla mia domanda, è chiaro che comprendo pienamente la differenza tra i due, probabilmente meglio della maggior parte. La mia domanda è se ci sono circostanze I deve use .attr(), che è una domanda completamente diversa da .prop() vs .attr().

+1

Beh, c'è sempre [questo post preesistente] [1] per rispondere alla tua domanda. [1]: http://stackoverflow.com/questions/5874652/prop-vs-attr – dudewad

+2

Sto votando per riaprire questa domanda, perché non credo che nessuna risposta sulla questione legata realtà discuti quando uno sviluppatore potrebbe voler usare 'attr()' in uno scenario reale. – StriplingWarrior

+1

@dudewad Per favore leggi di nuovo la mia domanda. È completamente diverso dalla domanda che hai collegato, che ho letto e studiato in profondità prima di pubblicare la mia domanda. Se riesci a trovare una risposta alla mia domanda in quel collegamento, fai riferimento ad essa. – dallin

risposta

3
<input id="check1" checked="checked" type="checkbox" /> 
.attr('checked') //returns checked 
.prop('checked') //returns true 
.is(':checked') //returns true 

restituisce metodo prop Valore booleano per selezionato, selezionato, disabilitato, readOnly..etc mentre attr restituisce stringa definita. Quindi, puoi usare direttamente .prop ('checked') in se condizione.

.attr() chiama .prop() internamente il metodo .attr() sarà leggermente più lento dell'accesso diretto a .prop().

Per jQuery 1.6+, il puntello verrà utilizzato principalmente perché è semplice e più largo di attr. Nella maggior parte dei vecchi progetti, attr viene utilizzato per ottenere informazioni sullo stato corrente dell'elemento. Ma ora il sostegno ha preso questo lavoro e attr sarebbe stato sostituito con il sostegno.

Check this link