Ecco il mio HTML:Come posso capire questo comportamento della casella?
<input class='user_roles' id="chk" type=checkbox />
<input id="btn_on" type="button" value="on" />
<input id="btn_off" type="button" value="off" />
E il mio jQuery:
$('#chk').click(function() {
if($(this).prop("checked") === true) {
alert ("checked");
}
else{
alert ("not checked");
}
});
$("[id$=btn_on]").click(function() {
$('#chk').click();
});
$("[id$=btn_off]").click(function() {
$('#chk').click();
});
Un esempio di lavoro è here.
Quando si fa clic sulla casella di controllo con il mouse, viene immediatamente verificata, ovvero l'avviso visualizza "controllato". Tuttavia, quando viene fatto clic su uno dei pulsanti, che indirettamente chiama il metodo di clic sulla casella di controllo, la casella di controllo non viene selezionata fino a dopo il il codice di clic è stato eseguito.
Per verificare ciò, fare clic sulla casella di controllo un paio di volte con il mouse e verranno visualizzati rispettivamente gli avvisi "controllato" e "non selezionato". Fai clic su "On" e vedrai l'avviso "non selezionato", quindi la casella di controllo diventa selezionata. Se fai clic su "Off", vedrai "checked" seguito dalla casella di controllo deselezionata.
Qual è il motivo di questo comportamento? Come posso assicurarmi che la casella di controllo "verifica" avvenga prima che venga chiamato il codice listener dei clic, come da comportamento del mouse?
Cosa stai cercando di uscire da questo? Avere un pulsante "on/off" per una 'checkbox' sembra un po 'ridondante. – Jack
@Jack, è un esempio molto semplificato. Ho un click listener su più checkbox e un pulsante per controllarli tutti in una volta, quindi perché ho bisogno di sapere che l'azione di controllo avviene prima del codice click. –