javascript - 为什么 jQuery 的更改事件会多次触发?

标签 javascript html jquery

我正在尝试将事件处理程序绑定(bind)到动态添加的 <select>元素。但每次选择列表更改时,该事件都会额外触发 1 次。 (第一次会触发一次,然后两次,然后三次,依此类推)

$(document).on('change', '.gender-select', function() {
  $('.gender-select').change(function() {
    alert($(this).find("option:selected").text());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<select class="gender-select">
  <option value="">- Select Gender -</option>
  <option value="m">Male</option>
  <option value="f">Female</option>
</select>

https://jsfiddle.net/L3p9ez5d/3/

解决方案

谢谢罗里·麦克罗森 (Rory McCrossan) 的回答。非常简单,我在委托(delegate)事件处理程序内部有一个静态事件处理程序,因此当委托(delegate)处理程序触发时,处理程序不断添加。

最佳答案

原因是因为您正在嵌套事件处理程序。您已在委托(delegate)事件处理程序中放置了一个静态事件处理程序,因此每次发生事件时都会添加另一个处理程序。这也是为什么当您第一次选择一个选项时没有任何反应的原因。

要解决此问题,只需删除内部静态事件处理程序即可:

$(document).on('change', '.gender-select', function() {
  console.log($(this).find("option:selected").text());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<select class="gender-select">
  <option value="">- Select Gender -</option>
  <option value="m">Male</option>
  <option value="f">Female</option>
</select>

关于javascript - 为什么 jQuery 的更改事件会多次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66536085/

相关文章:

javascript - 从对象中的子元素中获取文本

javascript - 如何使用谷歌脚本覆盖具有相似名称和数据的现有谷歌工作表?

javascript - 将 scrape-it npm 的页面结果分配给变量会返回 Promise { <pending> }

php - "type"是从 select 标签中选择的选项

javascript - 不选择值自动获取多选所有值并显示

javascript - 给定一串 HTML 代码,我如何遍历每个标记并删除所有 "event"属性?

javascript - 为什么我的刷卡器未定义?

javascript - <span> onclick 事件未触发

javascript - 使用通用指针从另一个子对象的子对象引用 Javascript 对象的子对象

javascript - 如何在javascript中优先执行dom