.prop (‘checked’, false) o .removeAttr (‘checked’)?

Con l’introduzione del metodo prop, ora ho bisogno di sapere il modo accettato di deselezionare una casella di controllo. È:

$('input').filter(':checkbox').removeAttr('checked'); 

o

 $('input').filter(':checkbox').prop('checked',false); 

jQuery 3

A partire da jQuery 3, removeAttr non imposta più la proprietà corrispondente su false :

Prima di jQuery 3.0, l’utilizzo di .removeAttr() su un attributo booleano come checked , selected o readonly avrebbe anche impostato la corrispondente proprietà denominata su false . Questo comportamento era richiesto per le versioni precedenti di Internet Explorer ma non è corretto per i browser moderni perché l’attributo rappresenta il valore iniziale e la proprietà rappresenta il valore corrente (dinamico).

È quasi sempre un errore usare .removeAttr( "checked" ) su un elemento DOM. L’unica volta che potrebbe essere utile è se il DOM verrà successivamente serializzato su una stringa HTML. In tutti gli altri casi, .prop( "checked", false ) dovrebbe essere usato .prop( "checked", false ) .

changelog

Quindi solo .prop('checked',false) è il modo corretto quando si utilizza questa versione.


Risposta originale (dal 2011):

Per gli attributi che hanno sottostanti proprietà booleane (di cui è checked uno), removeAttr imposta automaticamente la proprietà sottostante su false . (Si noti che questo è tra le “correzioni” di compatibilità all’indietro aggiunte in jQuery 1.6.1).

Quindi, funzionerà … ma il secondo esempio che hai dato (usando l’object) è il più corretto dei due. Se il tuo objective è deselezionare la casella di controllo, davvero vuoi influenzare la proprietà , non l’attributo, e non c’è bisogno di passare a removeAttr per farlo.

usa checked : true, false proprietà della casella di controllo.

jQuery:

 if($('input[type=checkbox]').is(':checked')) { $(this).prop('checked',true); } else { $(this).prop('checked',false); } 

Consiglio di utilizzare entrambi, prop e attr perché ho avuto problemi con Chrome e l’ho risolto utilizzando entrambe le funzioni.

 if ($(':checkbox').is(':checked')){ $(':checkbox').prop('checked', true).attr('checked', 'checked'); } else { $(':checkbox').prop('checked', false).removeAttr('checked'); } 

Un’altra alternativa per fare la stessa cosa è filtrare sull’attributo type = checkbox :

 $('input[type="checkbox"]').removeAttr('checked'); 

o

 $('input[type="checkbox"]').prop('checked' , false); 

Ricorda che la differenza tra attributi e proprietà può essere importante in situazioni specifiche. Prima di jQuery 1.6 , il metodo .attr () a volte prendeva in considerazione i valori delle proprietà quando recuperava alcuni attributi, il che poteva causare un comportamento incoerente. A partire da jQuery 1.6, il metodo .prop () fornisce un modo per recuperare esplicitamente i valori delle proprietà, mentre .attr () recupera gli attributi.

Saperne di più …