Javascript jquery change函数不能正确处理多个类

Javascript jquery change函数不能正确处理多个类,javascript,jquery,Javascript,Jquery,请看代码 $(.test”)。在(“单击”,函数(){ var sclass=$(this.attr(“类”).split(“”[1]; $(“.color”).trigger(“单击”); $(“.color”).on(“更改”,函数(){ var scolor=$(this.val(); $(“+sclass).css(“背景色”,scolor); }); }); hii 您好您遇到的问题是,您在每次单击时都向颜色输入添加了一个新的change处理程序。这意味着在.test2上创建新的

请看代码

$(.test”)。在(“单击”,函数(){
var sclass=$(this.attr(“类”).split(“”[1];
$(“.color”).trigger(“单击”);
$(“.color”).on(“更改”,函数(){
var scolor=$(this.val();
$(“+sclass).css(“背景色”,scolor);
});
});



hii


您好
您遇到的问题是,您在每次单击时都向颜色输入添加了一个新的
change
处理程序。这意味着在
.test2
上创建新的处理程序时,第一个处理程序将附加到
.test1
元素。这就是为什么这两个元素都会受到变化的影响

您需要将
更改
处理程序移到
单击
处理程序之外。然后,您可以直接存储元素的引用而不是类。试试这个:

$(.test”)。在(“单击”,函数(){
$(“.color”).data('el',$(this)).trigger(“click”);
});
$(“.color”).on(“更改”,函数(){
var$el=$(this.data('el');
$el&&$el.css(“背景色”,此.value);
});



hii


您好
您应该先使用关闭,然后再使用打开

$(.test”)。在(“单击”,函数(){
var$el=$(本);
$(“.color”).off(“更改”).on(“更改”,函数(){
$el.css(“背景色”,$(this.val());
})。单击();
});



hii


您好
为了理解这个bug,您需要了解Javascript闭包。这里有一个很好的链接解释了这一点,它揭示了这是一个很容易犯的错误()


当您将这些函数分配给这些事件时,您正在创建闭包,并且每个闭包共享相同的环境。本质上,
sclass
将等于
test2
。您在
$(“+sclass)
中的选择将扩展到
$(.testtest2)
。另外,您可能需要在jQuery选择中包含引号。

不需要全局变量。请检查此项,我正在使用而不是打开。你知道区别吗?你错了!他可以在他想要的时候改变它。。。试试我的片段。另外,请阅读更多关于“傲慢”的含义。他只需要在div点击时更改颜色。这正是他所需要的。我们会看到的。所以可以使用
off()
on()
:)虽然有趣,但这不是问题所在。问题是在
上使用
会留下事件处理程序,因此第二次单击仍会触发第一个div(即在第二次单击时,有两个更改处理程序,而不仅仅是当前div的一个)。供将来参考:您已经详细说明了可能导致问题的原因,这很好,但是你还没有提供如何解决这个问题的信息。