Javascript 委托和AddClass不工作

Javascript 委托和AddClass不工作,javascript,jquery,html,dom,addclass,Javascript,Jquery,Html,Dom,Addclass,我在让这段代码正常工作时遇到了问题。它的构建允许用户单击一行,通过另一个类高亮显示来选择它。如果单击了另一行,则该行将高亮显示,当前行将被清除。如果再次单击已高亮显示的一个,它将被清除回正常状态 这是一个ajax调用,用于刷新页面,因此每次调用完成并插入表的html时,都会调用下面的函数。出于某种原因,每隔重新加载一次表,这种方法就会起作用。我在函数末尾找到了不起作用的行$this.addClassselectedUserClass。我放在那里的调试控制台日志可以使用正确的类工作,但是下一节由于

我在让这段代码正常工作时遇到了问题。它的构建允许用户单击一行,通过另一个类高亮显示来选择它。如果单击了另一行,则该行将高亮显示,当前行将被清除。如果再次单击已高亮显示的一个,它将被清除回正常状态

这是一个ajax调用,用于刷新页面,因此每次调用完成并插入表的html时,都会调用下面的函数。出于某种原因,每隔重新加载一次表,这种方法就会起作用。我在函数末尾找到了不起作用的行$this.addClassselectedUserClass。我放在那里的调试控制台日志可以使用正确的类工作,但是下一节由于某些原因没有添加该类

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

adeneo为我指出了一些事情,主要是即使刷新了表,监听器仍然存在,因此在每次ajax调用之后,监听器都被放在另一个上,这导致了只对“偶数”调用有效的功能

每次调用此侦听器加载函数时,我都使用jquery中的“off”函数清除事件处理程序。我还将“委托”切换为“开”,以便更准确

我基本上是这样做的:

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

该代码在某种程度上暗示您正在插入ID为selectuser的多个元素,并且多次设置相同的委托事件处理程序。将ID更改为类,并将委托事件处理程序移到ajax函数之外。要明确的是,每次调用ajax时,它都会用新的表体替换旧的表体,因此没有多个具有相同ID的对象,尽管如此,我还是将其更改为类,但它不起作用。我将事件处理程序移到了外部,但它仍然不起作用。问题是,每次ajax调用都会调用该函数,这就是为什么每次添加和删除类都会取消,每次添加相同的事件处理程序的次数都是偶数。现在,您只需找出如何修复它,查看on的委托版本将是一个良好的开端。即使每次mvc中的表体html都被部分视图完全替换,这怎么可能呢?还有我不知道的保存的东西吗?另外,查看on的委托版本是什么意思?jQuery的委托已被弃用,并被替换为。如果您替换了所有内容,事件处理程序仍然存在,并且您多次添加相同的事件处理程序,这并不重要。