0

このコードを機能させるのに問題があります。ユーザーが1つの行をクリックして、別のクラスを介して強調表示することで「選択」できるように構築されています。別の行をクリックすると、その行が強調表示され、現在の行がクリアされます。すでに強調表示されているものをもう一度クリックすると、通常の状態に戻ります。

これは、ページを更新するための ajax 呼び出し内にあるため、呼び出しが終了してテーブルの html が挿入されるたびに、以下の関数が呼び出されます。何らかの理由で、テーブルを 1 回おきにリロードすると、これが機能します。関数の最後に $(this).addClass(selectedUserClass) として機能していない行を追跡しました。そこに入れたデバッグ コンソール ログは正しいクラスで動作しますが、次のセクションでは何らかの理由でクラスが追加されません。

firebugでは、行が .. から に変わるのですが、変わらないのですか? 私はこれを何時間も見てきましたが、理解できません。助けてくれてありがとう!

function loadUserListener(style) {
    if (style == "normal") {
        selectedUserClass = 'selectedUser';
        selectedJQueryClass = '.selectedUser';
    } else {
        selectedUserClass = 'selectedUserInverted';
        selectedJQueryClass = '.selectedUserInverted';
    }
    console.log('setting');
    $("#selectuser").delegate("tr", "click", function () {
        if ($(this).hasClass(selectedUserClass)) {
            $(selectedJQueryClass).removeClass(selectedUserClass);
        } else if ($(selectedJQueryClass)[0]) {
            console.log('another');
            $(selectedJQueryClass).removeClass(selectedUserClass);
            $(this).addClass(selectedUserClass);
        } else {
            console.log(selectedUserClass);
            $(this).addClass(selectedUserClass);
        }
    });
}
4

1 に答える 1

0

主に、テーブルが更新されてもリスナーがまだそこにあるため、 ajax 呼び出しのたびにリスナーが別のリスナーに配置され、「偶数」呼び出しでのみ機能する機能が発生します。

このリスナーの読み込み関数が呼び出されるたびに、jquery の「off」関数を使用してイベント ハンドラーをクリアしました。また、デリゲートをオンに切り替えて、より正確にしました。

私は本質的にこれをしました:

$('.selectuser').off("click");
于 2013-08-22T12:51:35.527 に答える