Delegate和AddClass不起作用

时间:2013-08-21 20:01:07

标签: javascript jquery html dom addclass

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

这是在刷新页面的ajax调用中,因此每次调用完成并插入表的html时,都会调用下面的函数。出于某种原因,每次重新加载表,这都有效。我已经在功能结束时跟踪了无效的$(this).addClass(s​​electedUserClass)行。我放在那里的调试控制台日志工作,使用正确的类,但下一节不会出于某种原因添加类。

在萤火虫中,线条从......变为,但它没有变化?我一直在看这几个小时,我无法弄明白。谢谢你的帮助!

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);
        }
    });
}

1 个答案:

答案 0 :(得分:0)

adeneo为我指出了一些事情,主要是即使表被刷新,监听器仍然存在,所以在每次ajax调用之后,一个监听器被放在另一个监听器上,这导致只能在'even'上工作的功能调用。

每次调用此监听器加载函数时,我都使用jquery中的'off'函数来清除事件处理程序。我还将代表转为更正确。

我基本上是这样做的:

$('.selectuser').off("click");