多个相同名称的按钮如何分别添加监听事件?

多个相同名称的按钮如何分别添加监听事件?

js 监听事件覆盖问题

问题描述

在一个 html 中有多个带有相同名称的按钮,需要分别为每个按钮添加不同的监听事件。在使用 javascript 绑定事件时,发现点击其中一个按钮会触发所有按钮绑定的事件。

问题分析

在 javascript 中使用 for 循环绑定事件时,变量 [i] 每次执行都会指向最后一个数字。导致的问题是,当执行事件回调函数时,它始终引用最后一个按钮绑定的回调函数,而不是当前点击按钮的回调函数。

解决方案:使用闭包

为了解决这个问题,可以使用闭包来捕获 for 循环中每个迭代的 [i] 值。闭包是一个函数,可以访问其创建时的变量环境。

通过将事件处理程序包装在闭包中,我们可以确保每个按钮都绑定到其唯一的回调函数,如下所示:

for (var i = 0; i < rowButtons.length; i++) {  (function(i) {    var _name = rowButtons[i].name;    var _callback = rowButtons[i].callback;    var _operate_Arr = document.getElementsByName(_name);    for (var j = 0; j < _operate_Arr.length; j++) {      _operate_Arr[j].addEventListener("click", function() {        var rowObj = this.parentNode.parentNode;        _callback(rowObj);      }, true);    }  })(i);}

通过这种方式,每个按钮的回调函数都有自己的闭包作用域,并可以正确引用与之对应的 [i] 值。

以上就是多个相同名称的按钮如何分别添加监听事件?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1496801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 18:55:11
下一篇 2025年12月19日 18:55:29

相关推荐

  • JavaScript 中 var 和 let 有什么区别?

    javascript 中 var 和 let 的区别 在 javascript 中,使用 var 和 let 关键字可以声明和定义变量。然而,这两个关键字之间存在着一些关键的区别: 作用域 var:声明的变量具有全局作用域,这意味着可以在代码的任何位置访问这些变量。let:声明的变量具有局部作用域,…

    2025年12月19日
    000
  • JavaScript 中 var 和 let 关键字声明变量的区别是什么?

    js中var和let关键字声明变量的差异 在JavaScript中,声明变量可以使用var和let关键字。下面介绍其区别: 范围 var声明的变量具有全局作用域,可以在整个脚本中访问。let声明的变量具有块级作用域,仅在声明块内可访问。 重新声明 立即学习“Java免费学习笔记(深入)”; var声…

    2025年12月19日
    000
  • JavaScript 中 this 在嵌套函数中的指向问题:为什么匿名函数中的 this 指向 window?

    this作用域问题 在JavaScript中,this关键字引用当前执行代码的对象。在给定的代码示例中,函数y()作为对象obj的方法被调用。但是,在y()函数内部定义的匿名函数在全局上下文中执行,导致this指向window对象而不是obj。 网上提供了一些解释: 知乎用户月夕指出,匿名函数在该上…

    2025年12月19日
    000
  • JavaScript 中 var 和 let 变量声明有什么区别?

    javascript 中 var 和 let 变量声明的差异 在 javascript 中,可以声明变量的方式有两种:var 和 let。它们之间的主要区别在于作用域。 var 使用 var 声明的变量属于全局变量。变量可以多次声明,并且每次声明都会创建新的变量。变量可以在声明之前访问,这会导致一个…

    2025年12月19日
    000
  • 为什么异步回调中的 `this` 指向全局对象 `window` 而不是预期对象?

    this作用域疑窦 在一段代码中,我们看到如下情况: var obj = { x: 100, y: function () { setTimeout(function () { alert(this.x); }, 2000); }};obj.y(); 令人费解的是,调用obj.y()后,弹出的却是u…

    2025年12月19日
    000
  • 在构造函数中使用 setInterval 时,如何解决 this 指向问题?

    构造函数中使用 setinterval 的问题 在构造函数中使用 setinterval 时可能会遇到指向问题。当 this 指向改变时,setinterval 将不再正确地调用方法。解决方法包括: 1. 使用 bind 方法 bind方法创建一个新函数,并指定新函数的 this 关键词: _thi…

    2025年12月19日
    000
  • 如何在 JavaScript 控制台中查看方法参数对象的具体信息?

    在 JS 控制台中查看方法参数对象的具体信息 在 JavaScript 控制台中,有时希望深入了解方法参数对象的具体信息。在运行时下断点,控制台会同步作用域,输入变量名可以轻松打印对象信息。 但对于在函数签名中不运行的情况,鉴于 JavaScript 的动态特性,几乎是不可能的。因为即使是一个无参函…

    2025年12月19日
    000
  • 了解 JavaScript 中的作用域和作用域链

    javascript 开发人员经常会遇到作用域、作用域链、词法环境和不同类型的作用域(全局作用域、函数作用域和局部作用域)等术语。这些概念对于理解变量和函数的行为方式、它们的可访问性以及 javascript 在执行代码时如何找到它们至关重要。在本博客中,我们将分解这些主题,以帮助您掌握 javas…

    2025年12月19日
    000
  • 在构造函数中使用 setInterval 时,为什么 this 会指向 window 对象?

    在构造函数中使用 setinterval 的常见问题 当我们在构造函数中使用 setinterval 时,可能会遇到 this 指向问题,导致 setinterval 仅执行一次。 这主要是由于 javascript 中 this 的绑定机制。在构造函数中,this 被绑定到新创建的对象。当我们使用…

    2025年12月19日
    000
  • 为什么 JavaScript 会出现 “leida is not defined” 错误?

    错误解决:未定义函数 leida 在尝试调用 leida 函数时,提示 “leida is not defined” 错误,表明该函数在当前作用域中尚未定义。可能是因为您忘记加载包含该函数的 JavaScript 文件,或者脚本加载顺序不正确。 解决方案: 确认您已加载正确的…

    2025年12月19日
    000
  • 在 JavaScript 中,如何查看方法参数中的对象详细信息?

    Js控制台查看方法参数中的对象具体信息 在Js中,如何使用控制台查看方法参数中对象的详细信息? 如图所示,我们希望获取t对象的具体属性信息。 解决方案: 如果是在运行中下断点,则可以通过控制台输入变量名(如t)打印对象的详细信息,控制台会同步作用域,甚至可以得到智能提示。 立即学习“Java免费学习…

    2025年12月19日
    000
  • jQuery 升级后 $.browser.msie 报错怎么办?

    如何解决 jquery 升级后 $.browser.msie 报错 在前端项目中,使用 $.browser.msie 检测 ie 浏览器已成为惯例。然而,随着 jquery 升级,$.browser.msie 已不再受支持。如果您遇到此错误,可以使用简单的方式来解决: 通过以下代码重写 $.brow…

    2025年12月19日
    000
  • js如何阅读js源码

    阅读 JavaScript 源码需要遵循以下步骤:理解 JavaScript 基础选择简易的代码文件逐行分析代码利用调试工具查找文档和示例练习和耐心 如何阅读 JavaScript 源码 第一步:熟悉 JavaScript 基础 在尝试阅读 JavaScript 源码之前,确保你对 JavaScri…

    2025年12月19日
    000
  • 如何封装自己的js函数

    在 JavaScript 中,封装函数创建了一个私有作用域,通过两种常见方法实现:工厂模式:创建包含私有属性和方法的对象作为函数返回值。立即调用函数表达式 (IIFE):将函数作为立即调用的匿名函数的参数,函数在内部被调用,返回带有私有作用域的对象或闭包。 如何封装自己的 JavaScript 函数…

    2025年12月19日
    000
  • js 闭包如何调用

    调用 JavaScript 闭包的步骤:声明一个创建闭包的外部函数。在外部函数中定义需要访问的变量和函数。返回一个内部函数作为闭包。在需要使用闭包的地方调用内部函数。 如何调用 JavaScript 闭包 什么是闭包?闭包是在 JavaScript 中创建的函数,它可以访问其创建范围之外的变量和函数…

    2025年12月19日
    000
  • 为什么JavaScript闭包会导致按钮点击事件输出相同索引值?

    点击按钮隐藏对应序号li的问题与解决 在html中,定义一个带6个lis的ul列表,并给每个li设置不同颜色的背景。此外,还定义了6个按钮,每个按钮对应一个特定的背景色。 在javascript中,获取所有按钮和lis的引用,并为每个按钮添加一个点击事件监听器。在点击事件处理程序中,遍历lis,并在…

    2025年12月19日
    000
  • 为什么这段 JavaScript 代码中的 `i` 始终输出 6?

    js 闭包问题 给定以下代码: document ul li:nth-child(1) { background: #00ffff; } ul li:nth-child(2) { background: #0011ff; } ul li:nth-child(3) { background: #ff0…

    2025年12月19日
    000
  • 为什么 JavaScript 闭包会自动捕获变量,以及如何解决循环中闭包自动捕获变量带来的问题?

    关于 javascript 闭包自动捕获变量的理解 问题描述: 以下代码中,单击按钮时,控制台输出的是一个固定值 6,而不是预期的按钮索引: var oinput = document.getelementsbytagname(“input”); var oli = document.getelem…

    2025年12月19日
    000
  • 了解 JavaScript 闭包:综合指南

    了解 javascript 闭包:综合指南。 什么是闭包? 闭包是一个基本的 javascript 概念,其中内部函数可以访问其外部(封闭)函数的变量和参数,即使在外部函数完成执行之后也是如此。简而言之,闭包允许函数“记住”并访问其外部作用域中的变量,即使该函数在不同的作用域中执行也是如此。 闭包的…

    2025年12月19日
    000
  • JavaScript 中的 this:究竟指向哪里?

    深入了解 js 中 this 的用法 虽然文章提到 this 的值会根据函数调用方式而变化,但它有一个恒定的原则:this 始终指向调用函数的对象。但是,如果你想深入了解 this 的用法,请继续继续阅读。 this 的常见用法 方法调用:函数作为某个对象的方法被调用时,this 指向该对象。例如:…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信