首页 > 解决方案 > 使用 Javascript 为页面上的多个按钮启动 onClick() 事件

问题描述

我发现了一些关于类似主题的文章,但不幸的是,解决方案不起作用。如果那是我的错误,请原谅我。

背景 我有一位客户正在从一个基于 Web 的 pdf 文档库提供商迁移到另一个。除了我们进入并单击每个文件的下载之外,当前的提供商无法导出所有文件。页面上有一个所有文档的列表,每个文档旁边都有下载按钮。

我尝试使用 Google Chrome 中的控制台编写脚本来执行此操作。

代码 所有下载按钮的id名称结构类似如下,其中数字递增:

id="mainForm:documentList:0:j_id_4d"
id="mainForm:documentList:1:j_id_4d"
id="mainForm:documentList:2:j_id_4d"

这是一个示例按钮:

<button id="mainForm:documentList:0:j_id_4d" name="mainForm:documentList:0:j_id_4d" type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="window.open('api/internal/documents/619c342f-e006-423e-b45b-43db822bd193','_self')" role="button" aria-disabled="false"><span class="ui-button-text ui-c">Download</span></button>

我编写了这段代码来查找所有与此匹配的按钮:

var buttons = document.querySelectorAll('[id$="_id_4d"]');

我可以看到按钮填充了所有正确的按钮。

当我使用此循环遍历所有按钮以启动 onclick 事件时,只有第一个 onclick 事件会启动下载。为了调试,我还在 for 循环中添加了一个 if 条件来测试特定索引是否会启动它的 onclick 下载事件(比如当 i 为 2 时)并且该 pdf 将下载。

for (var i = 0; i < buttons.length; i++) {
        buttons[i].click();
}

我还可以在网络控制台中看到第一个文件显示状态为 200,其他文件显示已取消。

网络错误

一些文章指出需要实现事件委托或侦听,我尝试过但也没有成功。我不再是编程人员,而是高级用户。任何见解都非常感谢。

非常感谢您!斯蒂芬

标签: javascripthtmleventsdownloaditeration

解决方案


问题是按钮的 window.open() 中的“_self”。

当我删除所有对 _self 的引用时,文件下载完美。

谢谢散光!


推荐阅读