javascript - jquery 更改函数无法与多个类一起正常工作

标签 javascript jquery

请看代码。

$(".test").on("click", function() {
  var sclass = $(this).attr("class").split(" ")[1];
  $(".color").trigger("click");

  $(".color").on("change", function() {
    var scolor = $(this).val();
    $("." + sclass).css("background-color", scolor);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="color" name="color" class="color"><br><br>
<div class="test test1">hii</div><br><br>
<div class="test test2">hello</div>

这里我需要通过选择 color 来改变 div 的背景颜色。但是当我为一个 div 选择颜色时,这个颜色会影响到两个吗?此代码中的错误是什么?

最佳答案

要了解此错误,您需要了解 Javascript 闭包。这里有一个很好的链接来解释它,它表明这是一个很容易犯的错误(link to MDN closures)。

当您将这些函数分配给那些事件时,您就是在创建闭包,并且每个闭包共享相同的环境。无论如何,sclass 基本上都等于 test test2。您在 $("."+ sclass) 中的选择将扩展为 $(.test test2)。此外,您可能需要在 jQuery 选择中包含引号。

关于javascript - jquery 更改函数无法与多个类一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398220/

相关文章:

jquery - 如何使用 CSS 和 Javascript 旋转(或更改)背景图像

javascript - 单击提交按钮后,如何通过快速节点在当前窗口的框中获取结果?

javascript - 仅在 slider 停止后更新 slider

jquery - View 中的粘性页脚而不是 shell.html

javascript - 使用 mongodb 收集 meteor 时出现重复的键

javascript - jquery 同位素过滤器完成后触发警报

javascript - Mediaelement 在音频标签中加载视频播放器

javascript - Angular - protected 页面

javascript - 我无法使用 jquery 隐藏点击事件上的 div

javascript - 我怎样才能防止我的模糊事件形式摆脱我的点击事件?