javascript - 单击事件处理程序在类更改后不工作

标签 javascript jquery html

如果用户点击其中一个 ul,那么颜色和类别应该会发生变化。我用这段代码解决了它,但我注意到在我更改类后事件处理程序不再工作。

ul 应该在每次点击时改变它们的颜色。

$("ul.AAA").click(function() {
  $(this).css("background-color", "yellow");
  $(this).removeClass("AAA");
  $(this).addClass("BBB");
})

$("ul.BBB").click(function() {
  $(this).css("background-color", "blue");
  $(this).removeClass("BBB");
  $(this).addClass("AAA");
})
div#start {
  border: 1px solid black;
  cursor: pointer;
}
ul.AAA {
  background-color: red;
}
ul.BBB {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="AAA">
  <li>
    <p>LIST 1</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>
<ul class="BBB">
  <li>
    <p>LIST 2</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>


我也用 on 试过了:

$("ul.AAA").on("click", function() {
  $(this).css("background-color", "yellow");
  $(this).removeClass("AAA");
  $(this).addClass("BBB");
})

$("ul.BBB").on("click", function() {
  $(this).css("background-color", "blue");
  $(this).removeClass("BBB");
  $(this).addClass("AAA");
})
div#start {
  border: 1px solid black;
  cursor: pointer;
}
ul.AAA {
  background-color: red;
}
ul.BBB {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="AAA">
  <li>
    <p>LIST 1</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>
<ul class="BBB">
  <li>
    <p>LIST 2</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>

我该如何解决这个问题?

最佳答案

当您动态更改类时,您需要使用 on(),但是您需要使用它的委托(delegate)版本。试试这个:

$(document).on("click", "ul.AAA", function() {
  $(this).css("background-color", "yellow");
  $(this).toggleClass("AAA BBB");
})

$(document).on("click", "ul.BBB", function() {
  $(this).css("background-color", "blue");
  $(this).toggleClass("AAA BBB");
})
div#start {
  border: 1px solid black;
  cursor: pointer;
}
ul.AAA {
  background-color: red;
}
ul.BBB {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="AAA">
  <li>
    <p>LIST 1</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>
<ul class="BBB">
  <li>
    <p>LIST 2</p>
  </li>
  <li>
    <div>
      <div>A</div>
      <div>B</div>
      <div>C</div>
    </div>
  </li>
</ul>

还要注意 toggleClass()addClass() 上的使用,然后是 removeClass()

关于javascript - 单击事件处理程序在类更改后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198164/

相关文章:

javascript - 如果没有选择单选按钮,如何修复警报?

PHP/Javascript/JQuery - base64 sha256 编码

javascript - 突出显示和取消突出显示在 jquery 中选择的元素

jquery - 如何将 Jquery 插件添加到 django

javascript - 比较 "this"对象与 DOM 数组中的对象

html - 使用 Emacs 将纯文本文件转换为 HTML。如何添加结束标签?

Javascript/jquery 适用于除 firefox 之外的所有浏览器

javascript - 如何从第三方应用程序替换评论部分中的图像

html - 中心按钮的可能模式

javascript - 可搜索下拉菜单