0

進行中にcategorycb_change関数を実行しないようにしたいのですが、機能しません。permissioncb_change

以下のコードでは、実行時に設定fireCategoryEventsしていますが、何らかの理由で実行を妨げません。デバッグすると、それが最初に実行され、実行が完了したときにのみ起動されることがわかります。falsepermissioncb_changecategory_cbpermissioncb_changecategorycb_change

(重要な注意:関数内でcategorycb_changeトリガーされます。)updateGroupCheckboxespermissioncb_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');
    }
}

このようにして、コードの実行を決定する前に、イベントの発生源を確認します。

4

1 に答える 1

0

問題の解決策で質問を更新しました。

于 2013-07-19T06:29:46.707 に答える