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 comechecked
,selected
oreadonly
avrebbe anche impostato la corrispondente proprietà denominata sufalse
. 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ù …