sto usando Prototype per monitorare le caselle di controllo, in modo da posso aggiungere javascript controlli a loro. Quando viene cliccato il tr o td in cui si trova la casella di controllo, è necessario selezionare la casella di controllo.
Quando si fa clic direttamente su una casella di controllo, viene attivato l'evento onchange, quindi riceverai un avviso. Quando il valore della casella di controllo 'viene modificato da javascript (quando si fa clic sul tr o td), onchange non viene attivato. Perché non si attiva la funzione onchange quando la casella di controllo viene modificata indirettamente?Perché onchange su una casella di controllo non generato quando la casella è cambiato indirettamente
Questo è il javascript che sto utilizzando.
Element.observe(window, 'load', function() {
/* If a tr or td is clicked, change the value of the checkbox. */
$$('#results tr').each(function(el) {
el.observe('click', function(e) {
if(!e.target) { e.target = e.srcElement; }
if(e.target.nodeName == 'TD' || e.target.nodeName == 'TR') {
$('compare-product'+this.id).checked = ($('compare-product'+this.id).checked === false) ? true : false;
}
});
});
/* Monitor if the status of a checkbox has changed. */
$$('#results tr td input').each(function(el) {
el.observe('change', function(e) {
alert('!');
}
);
}
);
}
);
L'ho provato in Firefox e IE7, entrambi non funzionano. Non sto cercando una soluzione alternativa, sono solo curioso di sapere perché questo non funziona.
Se lo fosse, che cosa accadrebbe se nel codice di gestione degli eventi è stato modificato lo stato della casella di controllo? –
Non capisco cosa intendi. – Robin
Se si modifica lo stato nel gestore pari, verrà richiamato lo stesso gestore eventi. In tal caso, potresti avere un ciclo infinito. –