Se você antecipar esse comportamento bastante indesejado, uma alternativa seria passar um parâmetro extra de jQuery.trigger () para o manipulador de cliques da caixa de seleção. Este parâmetro extra é para notificar o manipulador de cliques que o clique foi disparado programaticamente, em vez de o usuário clicar diretamente na própria caixa de seleção. O manipulador de cliques da caixa de seleção pode então inverter o status de verificação relatado.
Então, aqui está como eu acionaria o evento de clique em uma caixa de seleção com o ID "myCheckBox". Observe que também estou passando um parâmetro de objeto com um único membro, nonUI, que está definido como verdadeiro:
$("#myCheckbox").trigger('click', {nonUI : true})
E é assim que eu lido com isso no manipulador de eventos de clique da caixa de seleção. A função de manipulador verifica a presença do objeto não-UI como seu segundo parâmetro. (O primeiro parâmetro é sempre o próprio evento.) Se o parâmetro estiver presente e definido como verdadeiro, eu inverto o status .checked relatado. Se esse parâmetro não for passado - o que não acontecerá se o usuário simplesmente clicar na caixa de seleção na IU - eu relato o status real .checked:
$("#myCheckbox").click(function(e, parameters) {
var nonUI = false;
try {
nonUI = parameters.nonUI;
} catch (e) {}
var checked = nonUI ? !this.checked : this.checked;
alert('Checked = ' + checked);
});
Versão JSFiddle em http://jsfiddle.net/BrownieBoy/h5mDZ/
Eu testei com Chrome, Firefox e IE 8.