使用 Javascript 为页面上的多个按钮启动 onClick() 事件

如何解决使用 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 下载事件(比如当我是 2 时)并且该 pdf 将下载。

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

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

Network errors

有些文章指出需要实现事件委托或监听,我尝试过但也没有奏效。我更像是一个高级用户而不是编程了。非常感谢任何见解。

在此先感谢您! 斯蒂芬

解决方法

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

当我删除所有对 _self 的引用时,文件下载得很好。

谢谢散光!

,

您可以使用此选择器获取所有按钮:

var buttons=document.querySelectorAll('[id^="mainForm:documentList:"][id$=":j_id_4d"]');

并使用 forEach()

遍历它们

然后为列表中的每个项目调用 click

最终代码是这样的:

var buttons=document.querySelectorAll('[id^="mainForm:documentList:"][id$=":j_id_4d"]');
    
buttons.forEach(function(button){
    console.log(button);
    button.click();
});
,

这只是猜测。当 window.open() 不是来自用户操作时,通常会被阻止,因为浏览器可能会认为这是某种弹出式骗局。我在浏览器中尝试了这个简单的程序:

<button onclick="clicked()">click me</button>
<button onclick="clicked()">click me</button>
<button onclick="clicked()">click me</button>
<button onclick="clicked()">click me</button>
<button onclick="clicked()">click me</button>
<button onclick="clicked()">click me</button>


<script>
  function clicked() {
    window.open('https://google.com','_blank')
  }
  const buttons = document.querySelectorAll('button'); 
  buttons.forEach(button => button.click())
</script>

它无法正常工作。但是,如果我将浏览器 (chrome) 中的设置更改为允许弹出窗口,那么一切都会按预期进行。

你可能想试一试

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res