事件侦听器在没有事件的情况下执行并循环遍历 HTML 集合

2024-03-15

我正在尝试编写一个循环来初始化 JavaScript 中的事件处理程序。

我认为我做错了什么,因为我的调试功能在没有事件(点击)发生的情况下被激活。

我想做的是这样的:

var JS_elements = document.getElementsByClassName("JS")

for (y = 0; y < JS_elements.length; y++){
    document.write(JS_elements.item(y).innerHTML);
    JS_elements.item(y).addEventListener("click",testfunc());
}

function testfunc() {
    alert("TestFunc");
}

并在我单击 class="JS" 的元素时运行 testfunc() 。

线路document.write(JS_elements.item(y).innerHTML);行正确执行,所以我知道我正在获取正确的对象。遗憾的是,注释行导致此中断:testfunc() 在页面加载时自动运行三次。

谁能解释为什么会发生这种情况?我唯一能想到的是“点击”被评估为true因为某些原因。

HTML:

<header>
    <hr>
        <p>- Header Background Color Controller -</p>
        <table>
            <tr>
                <td>Javascript Controller:</td>
                <td class="JS">Red
                    <input type="hidden" value='false'>
                </td>
                <td class="JS">Green
                    <input type="hidden" value='false'>
                </td>
                <td class="JS">Blue
                    <input type="hidden" value='false'>
                </td>
            </tr>
            <tr>
                <td>jQuery Controller:</td>
                <td class="jQ" value=false>Red</td>
                <td class="jQ" value=false>Green</td>
                <td class="jQ" value=false>Blue</td>
            <tr>
        </table>
    <hr>
</header>

改变这个:

JS_elements.item(y).addEventListener("click",testfunc());

to this:

JS_elements.item(y).addEventListener("click",testfunc);

The ()使函数立即执行,并将返回结果传递给addEventListener()。那不是你想要的。相反,您想要传递一个函数引用,该引用应该只是函数的名称testfunc没有()在它之后。


如果你想传递参数testfunc并且它们对于所有事件处理程序都是相同的参数,那么您可以创建一个中间匿名函数:

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

事件侦听器在没有事件的情况下执行并循环遍历 HTML 集合 的相关文章

随机推荐

  • 通过 VSTO 在 PowerPoint 设计器中捕获鼠标事件

    我正在使用 C VSTO 开发 PowerPoint 2013 插件 当用户处于设计模式 而不是演示模式 如何捕获与幻灯片上的形状 对象有关的鼠标事件 例如鼠标悬停 鼠标按下等 我想监听这些事件 以便创建位于对象 形状附近的自定义 UI 是
  • USB 调试 - 安装 Epson Moverio 驱动程序时出现问题

    Android 开发新手 我使用以下命令制作了一个小应用程序Eclipse http en wikipedia org wiki Eclipse 28software 29在虚拟 Android 设备上完美运行 现在 我想在真实的设备上运行
  • 如何使用 jQuery 或其他 js 框架将字符串作为文件上传

    使用javascript 我有一个字符串文件 通过ajax请求获得 如何通过另一个ajax请求将其作为文件上传到服务器 以下是无需手动构建多部分请求正文的方法 var s some string data var filename foob
  • 将 dd/mm/yyyy 转换为 SQL Server 中的日期

    我正在疯狂地尝试将字符串类型列转换为日期 列名称是StartDate 其中包含字符串日期格式dd mm yyyy 字段类型是varchar 3000 我尝试了以下方法 CONVERT datetime StartDate 103 CAST
  • Perl 中的非阻塞/异步执行

    有没有办法实现非阻塞 异步执行 无需fork http perldoc perl org functions fork html ing 在 Perl 中 我曾经是一名 Python 开发人员很多年了 Python 有非常出色的 Twist
  • Vagrant 端口转发在 Mavericks 上不起作用

    我正在使用一个流浪的 Geodjango 盒子 https github com david wilson vagrant geodjango base并且端口转发对我不起作用 在盒子上 我运行了 python manage py runs
  • 运行时更改进度对话框消息

    我有一个相当简单的问题 我不知道如何解决 我想在进度对话框运行和显示时更改其消息文本 一个例子是 剩余时间 计数器 它会在进度动画旋转时进行倒计时 我不确定如何解决这个问题 因为即使在正在运行的线程中执行progressDialog set
  • 如何在 C# 中将名字和姓氏的首字母大写?

    有没有一种简单的方法可以将字符串的第一个字母大写并降低其余字母 有内置方法还是我需要自己制作 TextInfo ToTitleCase 将字符串的每个标记中的第一个字符大写 如果不需要维护 Acronym Uppercasing 那么您应该
  • php mysql jquery AJAX 自动完成区分大小写

    在我的 php 脚本中 names GET part result mysql query SELECT FROM namestable where names LIKE names LIMIT 10 while row mysql fet
  • CSS 将元素保持在屏幕上的“固定”位置

    我正在寻找一种使用 CSS 在浏览器屏幕上创建 固定 HTML 对象的技巧 我希望它始终保持在同一位置 即使用户滚动文档时也是如此 我不确定这个的正确术语是什么 它就像 Facebook 上的聊天按钮或某些网站上的反馈按钮 在整个页面中跟随
  • 方法封装的性能成本

    封装方法有性能成本吗 一个非常简短 随意的例子 public static decimal Floor decimal value return Math Floor value 上面的函数会被内联吗 如果是这样 它是否与从代码中调用 Ma
  • 如何在类方法 Objective C 中访问 self

    我有一个使用类方法的实用程序类 我试图在类方法中引用 self 但不能 我想知道如何在类方法中声明以下内容 MRProgressOverlayView showOverlayAddedTo self window animated YES
  • UITableView tableFooterView 显示在 UITableView 的顶部 - 错误

    我创建了一个非常简单的测试用例来重现这个问题 我正在尝试以编程方式将页脚视图设置为表格视图 请注意 我指的是表格视图最底部的页脚 而不是部分页脚 大多数堆栈溢出答案都会使他们感到困惑 这是我的非常简单的代码 void viewDidLoad
  • 矩形相交

    是否有任何已知的方法来计算两个矩形之间的相交矩形 我的意思是 如果矩形 A 由 x1 y2 x2 y2 定义 B 由 x3 y3 x4 y4 定义 那么如何计算相交矩形 C x5 y5 x6 y6 的坐标 Thanks 相交多边形的一般问题
  • 使用三点系统计算模型中的压痕深度?

    通过光线投射 我们可以选择游戏对象碰撞器上的一个点 在简短的视觉效果中 三个点用小球体表示 表示用户选择 我们的愿望是计算模型压痕中任何点的深度 当前的想法是使用一种系统 其中用户选择压痕深度之外的两个点和压痕深度内的一个点来计算压痕深度
  • 在Windows中,以这样的方式杀死批处理文件,其子文件也被杀死

    我需要开始一个exe from a cmd 包装 exe 以便我可以提供一些命令行选项 问题是 仅从 cmd 调用 exe 并不能使包装完全透明 如果 exe 挂起 终止 cmd 不会终止该 exe 我也需要它来杀死exe 我可以在普通 W
  • 如果 T-SQL 事务被取消,是否会回滚?

    匆忙中 我愚蠢地运行了一条语句来更新表 而没有用where陈述 于是它开始更新表中的所有记录 我立即注意到该错误并点击了 SQL Server Management Studio 中的 取消执行 按钮 但花了一分钟才停止运行 所以我的问题是
  • 嗅探器找不到 DJANGO_SETTINGS_MODULE

    我正在尝试在开发过程中进行更改后自动重新运行测试 搜索了一下之后sniffer http pypi python org pypi sniffer看起来不错 但如果我运行它 我的测试会失败并出现以下错误 ERROR Failure Impo
  • 如何将“active”类添加到 wp_nav_menu() 当前菜单项(简单方法)

    我正在使用入门主题 Underscores 和 Bootstrap 创建自定义 Wordpress 主题 我想修改wp nav menu以便它分配当前菜单项 active类而不是默认类 current menu item 我需要这个才能使用
  • 事件侦听器在没有事件的情况下执行并循环遍历 HTML 集合

    我正在尝试编写一个循环来初始化 JavaScript 中的事件处理程序 我认为我做错了什么 因为我的调试功能在没有事件 点击 发生的情况下被激活 我想做的是这样的 var JS elements document getElementsBy