在 Javascript onClick 事件中传递参数

2024-01-26

我试图在 onclick 事件中传递一个参数。下面是示例代码:

<div id="div"></div>

<script language="javascript" type="text/javascript">
   var div = document.getElementById('div');

   for (var i = 0; i < 10; i++) {
       var link = document.createElement('a');
       link.setAttribute('href', '#');
       link.innerHTML = i + '';
       link.onclick=  function() { onClickLink(i+'');};
       div.appendChild(link);
       div.appendChild(document.createElement('BR'));
       }

   function onClickLink(text) {
       alert('Link ' + text + ' clicked');
       return false;
       }
    </script>

然而,每当我单击任何链接时,警报总是显示“已单击链接 10”!

谁能告诉我我做错了什么?

Thanks


发生这种情况是因为一旦调用函数, i 就会向上传播。您可以使用闭包来避免此问题。

for (var i = 0; i < 10; i++) {
   var link = document.createElement('a');
   link.setAttribute('href', '#');
   link.innerHTML = i + '';
   link.onclick = (function() {
      var currentI = i;
      return function() { 
          onClickLink(currentI + '');
      }
   })();
   div.appendChild(link);
   div.appendChild(document.createElement('BR'));
}

或者,如果您想要更简洁的语法,我建议您使用 Nick Craver 的解决方案。

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

在 Javascript onClick 事件中传递参数 的相关文章

  • 从 Javascript 中的嵌套函数返回值[重复]

    这个问题在这里已经有答案了 考虑这段代码 缩短 function getSecret db transaction function transaction transaction executeSql SELECT FROM table
  • 提升变量有目的吗?

    我最近学习了很多 JavaScript 并且一直在尝试理解提升变量的值 如果有的话 我 现在 明白JS是一个两遍系统 它编译然后执行 另外 我知道 var 关键字 存在 在它声明的词法范围中 因此如果在引擎为其赋值之前调用它 那么它是 未定
  • appendChild 错误:无法在层次结构中的指定点插入节点

    There is an error with the function appendChild Node cannot be inserted at the specified point in the hierarchy JS var a
  • 需要使用 iFrame API 隐藏 YouTube 品牌

    我正在使用 YouTube iFrame API 在我的自定义播放器 javascript 播放器 中加载视频 我需要隐藏 Youtube 品牌 但是在 iOS 设备上 它显示带有以下参数的徽标 playerVars fs 1 autopl
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • React中如何触发同级组件的函数?

    I am new to front end world and could not figure out how to trigger a function from a sibling component Lets say I have
  • 仅在 Chrome 上我收到此错误:Uncaught TypeError: Illegal constructor [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我在 Chrome 上加载 jQuery 时 我会收到此错误 Uncaught TypeError Illegal constr
  • 如何将类型添加到 Vite 库构建中?

    我按照vite文档使用图书馆模式 https vitejs dev guide build html library mode我能够生成一个工作组件库 我创建了该项目vue ts预设 在我的组件中 我定义了道具及其类型 并使用了一些接口 但
  • 转义 \u200b(零宽度空格)和其他非法 JavaScript 字符

    我有一组 JavaScript 对象 我引导到后端模板 以在页面加载时初始化我的 Backbone js 集合 它看起来像这样 作为 Twig 模板 我遇到的问题是某些文本字段包含 u200b 零宽度空格 这会破坏
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • 如何按 Angular 表中的属性(该属性具有单个 rownspan)进行分组?

    我没有找到这个问题的合适标题 我的问题是 例如 我有一个包含两列的表 列汽车品牌和列汽车型号 我希望表是 like in this picture 换句话说 品牌名称只会出现 1 次 我的输入数组采用以下 json 格式 brand Aud
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • for循环中需要声明变量吗?

    有什么区别 for var i 0 i lt 5 i for i 0 i lt 5 i 是否有必要包含 var 关键字 我知道 var 关键字会影响变量范围 但我无法理解是否有必要在 for 循环中包含该关键字 在第二个示例中 您的变量是全
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 使用 File API polyfill 读取数据 URL

    我正在尝试使用文件 API 库 https github com mailru FileAPI https github com mailru FileAPI 作为不支持文件 API 的浏览器的后备 以便将文件作为数据 URL 读取并将其传
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • Keycloak-js updateToken(minValidity) 需要澄清

    我在Keycloak js中阅读了很多该方法的示例 但没有对以下方法进行明确的解释 updateToken minValidity number KeycloakPromise
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err

随机推荐

  • 如何使用用户脚本覆盖警报功能?

    现场有这样的代码 其站点位于 LAN 上 我尝试使用 GM 禁用该警报 我正在尝试这样做 unsafeWindow alert function 但我看到警报并收到此错误 Error uncaught exception Exception
  • Python 3 网页抓取选项

    我是 Python 新手 所以如果这是一个新手问题 我很抱歉 我正在尝试构建一个涉及网络抓取的程序 我注意到 Python 3 的网络抓取模块似乎比 Python 2 x 系列少得多 Beautiful Soup mechanize 和 s
  • 如何在 Android 中为 Fragment 设置标签

    我查看了 Stackoverflow 上的所有问题 但找不到这个问题的唯一明确答案 你怎么将标签设置为Fragment这样你就可以通过以下方式检索它getFragmentManager findFragmentByTag 有人可以给出一个简
  • 保存为 .ps/.eps 时 Matplotlib 绘图失去透明度

    如果我尝试使用 ps eps 扩展名保存一些带有透明椭球体的绘图 我会遇到问题 Here s the plot saved as a png If I choose to save it as a ps eps here is what i
  • 为什么我不能在 python3 中子类化元组?

    让我们先说一下这个问题你应该使用 new 代替 init 用于子类化不可变对象 https stackoverflow com questions 399022 why cant i subclass datetime date 话虽如此
  • webGL 中的平面着色

    我正在尝试在 webgl 中实现平面着色 我知道varying顶点着色器中的关键字将对该值进行插值并将其传递给片段着色器 我正在尝试禁用插值 我发现flat关键字可以做到这一点 但似乎不能在 webgl 中使用 flat varying v
  • 从 TensorArray 到 Tensor

    给定一个具有固定大小的 TensorArray 和具有统一形状的条目 我想通过将 TensorArray 的索引维度作为常规轴来获取包含相同值的 Tensor TensorArrays 有一个名为 gather 的方法 据称它应该可以做到这
  • 意外的 gcc 警告:函数返回局部变量的地址 - 这是编译器错误吗?

    以下是最小的工作示例 好吧 实际上它是最小的非工作示例 当使用 gcc 从版本 5 0 到 9 3 编译时 它会发出以下警告 它甚至似乎只在发布版本中发出警告 02及更高 Code class A class B const A getA
  • RVM - MacPorts 不会通过代理更新

    我正在尝试使用 RVM 在我的 iMac 上安装 ruby 我首先输入以下内容 rvm list known 然后 我使用以下行定位我想要安装的版本 我遵循的指南建议使用 1 9 2 而不是基本的 1 8 7 rvm install 1 9
  • 多态对象字符串

    我没能理解多态性 以这个例子为例 Object o new String foo 我做不到 o substring 1 2 谁能向我解释这个问题 这是由于里氏替换原则 https en wikipedia org wiki Liskov s
  • 如何让 Jenkins 在检查更改时忽略某些文件?

    在CVS配置的 排除区域 中 我添加了以下内容 d o so a exe obj dll lib txt tar tar gz 所有具有上述扩展名的文件都应被忽略 然而 Jenkins 仍然基于某个文件夹 ABC 中的文件 build tx
  • 提取“$@”中最后一个参数之前的参数

    我正在尝试创建一个 Bash 脚本 它将将从命令行给出的最后一个参数提取到一个变量中以在其他地方使用 这是我正在编写的脚本 bin bash compact archive and compact file folder s eval LA
  • 删除 NSTokenFieldCell 的回调

    我有一个 NSTokenField 和 NSTokenFieldCell 代表托管对象 当我通过键入创建一个新的 NSTokenFieldCell 时 我的 NSTokenField 的委托 NSArrayController 将使用以下方
  • 使用 mysqldump 忽略 mysql 数据库备份中的“视图”

    我需要忽略数据库中的所有视图并使用 mysqldump 进行备份 目前我正在使用以下选项 ignore table view1 ignore table view2 ignore table view3 有没有什么方法可以在不指定所有 视图
  • Spring boot项目中定义的全局变量和应用程序变量

    我正在尝试使用 spring 和 spring boot 开发微服务 在我的项目中 我正在将整体架构转换为面向服务的架构 项目包含 20 个微服务 我需要设置应用程序变量和全局变量 我有与此相关的困惑 我在这里添加这些困惑 可以在 appl
  • reST:具有任意标题的内联链接?

    如果我定义了内部超链接目标 如何使用任意文本作为链接标题链接到它 例如 This is a very long internal link target A short reference to the very long link tar
  • Web API 帮助页面 - 用户特定的响应类型

    我正在开发一个 API 它根据用户输出不同的响应 并且我当前正在使用 ResponseType 属性来描述返回的响应类型 但这仅允许我指定一种类型的响应 该响应类型在用户 有什么方法可以自定义帮助页面以显示用户将获得的响应类型吗 HelpP
  • HTML 语法高亮 sublime 3 Typescript

    我正在使用 TypeScript 和 Sublime 3 如何在模板属性中添加 HTML 高亮显示 注意 我已经在使用 Microsoft TypeScript 包 看看现在它没有突出显示 这是一个快速修复 仍然可以使用您已安装的TypeS
  • 如何使用 facebook sdk 在 LoginButton 中设置权限“publish_actions”?

    我想在 Facebook 时间线上发布一张照片 我正在使用 LoginButton 来设置权限 publish actions 但是我收到错误消息 com facebook FacebookException Cannot pass a p
  • 在 Javascript onClick 事件中传递参数

    我试图在 onclick 事件中传递一个参数 下面是示例代码 div div