Si consideri il seguente codice (http://jsfiddle.net/FW36F/1/):fuoco un evento su input.checked = true/false _without_ jQuery
<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=!document.getElementsByTagName('input')[0].checked;">toggle</button>
Se si fa clic sulla casella di controllo, si ottiene un avviso che indica se è selezionata o meno. Grande. Tuttavia, se fai clic sul pulsante di attivazione/disattivazione, la casella di controllo cambia lo stato selezionato, ma l'evento onchange NON viene attivato.
In sostanza, la casella di spunta per una casella di controllo viene attivata solo se l'utente fa effettivamente clic sulla casella di controllo, non se la casella di controllo viene modificata tramite JavaScript. Questo è vero in IE, FF e Chrome. Sembra che questo comportamento sia anche alla specifica.
Tuttavia, ho davvero bisogno di un qualche tipo di evento da attivare se, per qualsiasi motivo, lo stato della casella di controllo cambia. È possibile?
Oh sì, e jQuery non è consentito. E per favore no setTimeout/setInterval soluzioni basate ...
Aggiornamento: Inoltre, dovrei chiarire che il codice sopra è solo a scopo illustrativo. Nel codice reale, è necessario verificare che lo stato della casella di controllo sia selezionato o deselezionato, non solo abilitarlo. Forse sarebbe meglio il codice per illustrare che:
<input type="checkbox" onchange="alert(this.checked)">
<button onclick="document.getElementsByTagName('input')[0].checked=true;">check</button>
<button onclick="document.getElementsByTagName('input')[0].checked=false;">un check</button>
Inoltre, ci può essere il codice in altre aree non lo facciamo completamente il controllo, che potrebbe fare un semplice .checked = true/false - vorremmo per essere sicuri di vederlo anche
jQuery sarebbe non sparare l'evento di modifica nativo semplicemente impostando il suo valore –
Cosa c'è di sbagliato con i timeout? Non penso che ci sia qualcos'altro che funzionerà. – Jivings
@Jivings: Non posso credere che tu abbia effettivamente chiesto cosa c'è di sbagliato nel polling usando un timeout. È come buttare via i cicli e aggiungere un ritardo al momento della notifica. Meno ritardo, più sprechi i cicli della CPU. Ci sono molte risposte qui che soddisfano il requisito dell'OP –