進行中にcategorycb_change
関数を実行しないようにしたいのですが、機能しません。permissioncb_change
以下のコードでは、実行時に設定fireCategoryEvents
していますが、何らかの理由で実行を妨げません。デバッグすると、それが最初に実行され、実行が完了したときにのみ起動されることがわかります。false
permissioncb_change
category_cb
permissioncb_change
categorycb_change
(重要な注意:関数内でcategorycb_change
トリガーされます。)updateGroupCheckboxes
permissioncb_change
バインド解除と再バインドでもこれを試しましたが、同じ問題です。
私は何を間違っていますか、またはどうすればこれを修正できますか?
.permissioncheckbox
と.rolecategory
は両方とも html 入力チェックボックス要素です。コードビハインドupdateGroupCheckboxes
は非常に複雑です。したがって、ここで表示することは役に立たないと思います。(複数のチェックボックスのcheckedstateを変更して.rolecategory
、イベントをトリガーしcategorycb_change
ます)
var fireCategoryEvents = true;
$(function () {
$('.permissioncheckbox').change(permissioncb_change, 0);
$('.rolecategory').change(categorycb_change);
});
function permissioncb_change() {
fireCategoryEvents = false;
$(this).attr('data-changed', true);
if (firePermissionEvents) {
updateGroupCheckboxes(this);
}
fireCategoryEvents = true;
}
function categorycb_change() {
if (fireCategoryEvents) {
alert('cat changed');
}
}
解決
私は解決策を見つけました:
function permissioncb_change() {
$(this).attr('data-changed', true);
if (arguments[0].originalEvent.srcElement.className != 'rolecategory') {
updateGroupCheckboxes(this);
alert('per changed');
}
}
function categorycb_change() {
if (arguments[0].originalEvent.srcElement.className != 'permissioncheckbox') {
alert('cat changed');
}
}
このようにして、コードの実行を決定する前に、イベントの発生源を確認します。