0

我在让这段代码工作时遇到问题。它的构建允许用户单击一行以通过不同的类突出显示来“选择”它。如果单击另一行,则突出显示该行并清除当前行。如果再次单击已经突出显示的一个,它将被清除恢复正常。

这是在刷新页面的 ajax 调用中,因此每次调用完成并插入表格的 html 时,都会调用下面的这个函数。出于某种原因,每隔一次重新加载表,就可以了。我已经在函数末尾追踪到 $(this).addClass(selectedUserClass) 不起作用的行。我放在那里的调试控制台日志可以使用正确的类,但是下一部分由于某种原因没有添加该类。

在萤火虫中,该行从 .. 变为 ,但它没有改变?我一直在看这个几个小时,我无法弄清楚。谢谢你的帮助!

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

adeneo 为我指出了一些事情,主要是即使刷新了表,侦听器仍然存在,因此在每次 ajax 调用之后,都会将一个侦听器放在另一个侦听器上,这导致仅适用于“偶数”调用的功能。

每次调用此侦听器加载函数时,我都使用 jquery 中的“关闭”函数来清除事件处理程序。我还将委托切换到更正确的状态。

我基本上是这样做的:

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