在循环中创建的 jQuery 事件处理程序

2024-03-15

所以我有一组这样的事件:

$('#slider-1').click(function(event){   
        switchBanners(1, true);
});
$('#slider-2').click(function(event){   
        switchBanners(2, true);
});
$('#slider-3').click(function(event){   
        switchBanners(3, true);
});
$('#slider-4').click(function(event){   
        switchBanners(4, true);
});
$('#slider-5').click(function(event){   
        switchBanners(5, true);
});

我想通过一个循环运行它们,我已经在运行这样的东西:

for(i = 1; i <= totalBanners; i++){
    $('#slider-' + i).click(function(event){    
            switchBanners(i, true);
    });
}   

理论上应该可行,但一旦我加载文档,它似乎就不起作用了...它不会像单击时那样响应任何特定的 div id...无论我单击哪一个,它都会在每个 div 中进行。我想动态创建更多事件监听器,但我首先需要这些......

我缺少什么?


这是人们遇到的一个非常常见的问题。

JavaScript 没有块作用域,只有函数作用域。因此,您在循环中创建的每个函数都在相同的变量环境,因此它们都引用相同的i多变的。

要在新的变量环境中作用域变量,您需要调用具有变量的函数(或函数参数)引用您要保留的值。

在下面的代码中,我们通过函数参数引用它j.

   // Invoke generate_handler() during the loop. It will return a function that
   //                                          has access to its vars/params. 
function generate_handler( j ) {
    return function(event) { 
        switchBanners(j, true);
    };
}
for(var i = 1; i <= totalBanners; i++){
   $('#slider-' + i).click( generate_handler( i ) );
}

这里我们调用了generate_handler()函数,传入i,并且有generate_handler() 返回一个函数引用局部变量(named j在函数中,尽管你可以命名它i以及).

只要函数存在,返回函数的变量环境就会存在,因此它将继续引用创建它时/所在环境中存在的任何变量。


UPDATE: Added var before i以确保其声明正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在循环中创建的 jQuery 事件处理程序 的相关文章

  • 验证动态字段jquery

    下午好 我遇到了以下问题 我正在使用 jQuery 验证插件来验证我的表单 v1 13 0 客户端 工作得很好 但我无法解决的问题是 我有一个字段名称 product 它是一个数组 在这个阵列中我可能有一种或可能有 20 种产品 这是我的代
  • React Native 无法访问 Cloud Firestore 后端

    我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • ASP.NET 验证控件和 Javascript 确认框

    我有一个使用 NET 服务器端输入验证控件的页面 此页面还有一个 javascript 确认框 在提交表单时会触发该确认框 当前 当选择 提交 按钮时 会出现 javascript 确认框 一旦确认 就会触发 ASP NET 服务器端验证控
  • 我可以使用 jQuery 的 AJAX 将表单信息提交到 Google Spreadsheets 吗?

    我喜欢能够使用谷歌电子表格 但以视觉方式集成到我的网站中很棘手 所以我想我会重新创建他们的表单 一个简单的剪切 粘贴 通过 AJAX 提交表单 数据将转到电子表格 我可以将我的用户重定向到比谷歌默认的 谢谢你所做的一切 更漂亮的东西你刚刚做
  • 插件 gulp-babel 错误:插件/预设文件不允许导出对象,只能导出函数

    我现在尝试在我的 Ionic v1 应用程序中使用 JavaScript 2015 ES6 包 json name test version 1 0 0 dependencies ionic native deeplinks 4 18 0
  • 修复 Raphaël 路径节点上 Tipsy 工具提示的位置

    这是一个非常具体且有些复杂的问题 所以我设置了一个最小测试用例 http reveal dk 8080 revealit dk tipsytest 在阅读本文的其余部分之前 您可能应该先了解一下 我的页面显示悬停时突出显示区域的图像Raph
  • document.write 在同一页面上显示内容。

    我对 javascript document write 方法有疑问 大多数情况下 当我使用 document write 时 它会向我显示在不同页面中使用该方法编写的内容 例如 如果我写这样的命令 document write Hello
  • 是否有跨浏览器的方式在Javascript中设置style.float?

    通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
  • 无法从 JQuery ajax 调用接收 JSON

    我已经确定来自服务器的 JSON 是有效的 手动进行 ajax 调用 但我真的很想使用 JQuery 我还使用 firebug 确定发送到服务器的 post URL 是正确的 但是 错误回调仍然被触发 解析错误 我还尝试了数据类型 文本 我
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • jQuery 相当于 underscore.js 的 groupBy

    jQuery 中是否有一个内置函数可以执行相当于http underscorejs org groupBy http underscorejs org groupBy 有什么解决方法吗 Thanks 不 jQuery 不是为数据处理而设计的
  • Firebase 身份验证和实时应用程序数据库如何保护自身安全?

    从一般开发的角度来看 我很好奇如何保护在线资源的访问 我们使用以下 Firebase 配置参数初始化 Web 应用程序 apikey authdomain projectid databaseurl messagesenderid 服务器如
  • jQuery UI 对话框 - 关闭后无法打开

    我有一个问题jquery ui dialog box https jqueryui com dialog 问题是 当我关闭对话框然后单击触发它的链接时 除非刷新页面 否则它不会再次弹出 如何在不刷新实际页面的情况下回调对话框 下面是我的代码
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • 如何比较 2 个 Xcode 目标

    我如何比较 Xcode 中同一项目的两个目标之间的差异 我想看看源代码中的差异 也许还有构建信息 您可以通过选择目标然后 级别 来比较构建设置 据我所知 没有简单的方法来比较每个目标中包含哪些源文件
  • spring amqp-outbound gateway 生成来自不同 thead 的回复(如 jms-outbound gateway)

    问题陈述 Spring amqp outbound gateway 从不同线程生成回复 像 jms outbound gateway 一样 具有不同的队列 使用相关键关联请求 响应 无法将该消息与此示例关联起来 弹簧集成
  • Windows CreateFile 可能的错误代码

    我正在尝试将 Windows Linux 和 Mac 文件 IO 调用抽象为宏 以避免 C 运行时 所以没有fopen fclose ETC 我实际上做了很多工作 但遇到了绊脚石 我试图将每个平台可能抛出的所有可能错误归结为常见错误的子集
  • codeigniter 中的 allowed_uri_chars

    从 Facebook 返回时 使用 Facebook 登录 我收到错误 您提交的 URI 包含不允许的字符 我已将 allowed uri chars 设置如下 config permitted uri chars a z 0 9 我的网址
  • 在 Woocommerce 中以编程方式应用优惠券

    在 Woocommerce 中 如果购物车中的重量超过 100 磅 我试图找到一种对整个客户订单应用 10 折扣的方法 我正在实现这一目标 对于下一步 我正在寻找一种通过functions php 通过action hook 以编程方式应用
  • 在哪里可以找到 DownloadManager 的 ContentProvider 实现

    我已经尽可能多地搜索了android的开源代码 但我还没有找到通过2 3 SDK中的DownloadManager进行实际下载的实现 我已经找到了下载管理器的源 http grepcode com file repository grepc
  • 两个类之间的 iPhone KVO

    我的应用程序中有两个类 A 类和 B 类 A 类和 B 类都是 UIViewController 的实例 A 类有一个按钮 按下该按钮时会将 B 类推入堆栈 B 类有一个字符串 A 类希望观察该字符串并根据需要更新其接口 我已经能够使用 s
  • Java将“Excel日期序列号”转换为“日期时间”[重复]

    这个问题在这里已经有答案了 如何使用Java将 Excel日期序列号 即33257 415972222225 转换为DateTime 即19 01 1991 09 59 00 您还可以查看Apache POI 源代码 https githu
  • 如何用 swift 创建一个闹钟应用程序?

    我正在尝试用 swift 创建一种闹钟应用程序 但我不知道如何设置闹钟模型 我试过了UILocalnotification但我不希望我的用户除了设置闹钟之外参与闹钟应用程序的流程 然后尝试了NSTimer and NSRunloop等等 但
  • 相机插件 flutter web

    你好我想知道是否有一个用于 flutter web 的相机插件 以便拍摄照片并将其存储在临时路径中 然后将其上传到 firestorage 如果我理解正确 我希望您已经尝试过这些软件包 image picker 和 image picker
  • 如何在WP中将CookieContainer设置为BackgroundTransferRequest对象?

    我在用BackgroundTransferRequest and BackgroundTransferService用于上传一些数据 无论如何我可以设置CookieContainer to the TransferRequest None
  • @AutoConfigureWebMvc 和 @AutoConfigureMockMvc 有什么区别?

    在什么情况下我应该使用每一个 AutoConfigureWebMvc 如果您需要配置 Web 层进行测试但又不这样做 请使用此选项 需要使用MockMvc 它启用与 Web 层相关的所有自动配置ONLY网络层 这是整体自动配置的一个子集 它
  • 背景图片和搜索引擎优化

    目前 我的网站上有一些在 CSS 文件中定义为背景图像的图像 代码如下所示 HTML a href http domain com title Website Title class image a The CSS image backgr
  • 定义分段函数(例如多项式)

    在 C 中定义分段函数 例如在使用样条曲线时需要 的最佳方法是什么 Example f1 x if x from 0 5 f x f2 x if x from 5 10 f3 x if x from 10 20 我当前的方法如下所示 cla
  • 使用 lucene 模糊搜索和 Azure 搜索的同义词

    我希望能够同时处理模糊搜索和同义词 我尝试了多种方法 但无法使其正常工作 我的索引中有这些值 white black light dark 这个同义词规则 white light black dark 如果我执行查询queryType fu
  • 如何在android中以编程方式控制横向和纵向?

    我使用 android sdk 4 0 开发应用程序 并将该 apk 文件安装在我的三星选项卡中 当我运行该应用程序时 它工作正常 如果我将选项卡纵向更改为横向或相反 屏幕也会发生变化 但我的要求是 无论将模式更改为纵向还是横向还是横向还是
  • 使用 Quickbook 连接器和 Nodejs 进行 Quickbook(桌面)API 集成

    我是 Quickbooks 的新手 但我已经安装了 Quickbook Premier Desktop Edition 并拥有一个帐户以及 Quickbook 连接器 我正在尝试通过可用的 Quickbook 连接器将自定义应用程序中的发票
  • 类型错误:尝试更改数组列表的某些元素时,列表索引必须是整数,而不是元组

    我有一个 2 x n 的 x 和 y 坐标数组的列表 old array 1 2 3 4 5 6 array 10 20 30 40 50 60 我试图将 y 坐标 每个数组的第二行 移动某个值 shift 但是 当我尝试通过以下方法执行此
  • Phonegap 中的本地通知 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我的 iOS Phonegap 应用程序中获得本地通知 我遵循了很多教程和代码 但没有帮助 任何人都可以指导我吗 None
  • 在循环中创建的 jQuery 事件处理程序

    所以我有一组这样的事件 slider 1 click function event switchBanners 1 true slider 2 click function event switchBanners 2 true slider