复选框不能用 javascript 点击。.click() 不是一个函数

Checkbox not clickable with javascript. .click() is not a function

提问人:George D 提问时间:6/4/2023 最后编辑:George D 更新时间:6/5/2023 访问量:151

问:

我尝试在 Google Chrome 中使用 JavaScript 自动执行复选框以单击。

这是我检查复选框时浏览器的检查器向我显示的内容:

<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square" data-icon="Square" aria-hidden="true" focusable="false"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect></svg>

这就是我尝试单击按钮的方式:

document.getElementsByClassName('lucide lucide-square')[0].click();

它确实可以识别元素,但不会单击它。

它返回错误:

VM3971:1 Uncaught TypeError: document.getElementsByClassName(...)[0].click is not a function
    at <anonymous>:1:60

有人可以帮忙吗?

我也尝试过或使用querySelector调用元素,但它不起作用。.onclick

我希望该复选框能像同一网站上的其他复选框一样工作,这些复选框都可以点击.click()

JavaScript Google-Chrome 复选框 自动化 getElementsByClassName

评论

2赞 dram95 6/4/2023
复选框应为输入元素。这是一张 SVG 图像。
0赞 Pointy 6/4/2023
还返回元素列表。该列表可能为空 ( = 0),但它仍然是一个列表。您必须单独对列表的每个元素进行操作,例如设置事件处理程序。.getElementsByClassName()length
0赞 Louys Patrice Bessette 6/4/2023
@dram95 : 图像可用于替换复选框...当用户单击它时,事件会冒泡到“真实”的不可见控件。--这都是假设的困难。
0赞 Louys Patrice Bessette 6/4/2023
换句话说,它很可能是处理点击的 svg 的父级。
0赞 George D 6/4/2023
@LouysPatriceBessette 有没有办法跟踪它?我尝试搜索“按钮”和“复选框”,但找不到与之相关的任何类或 ID。

答:

0赞 Michael M. 6/4/2023 #1

您尝试单击的元素实际上不是一个按钮,而是一个 <svg> 元素,看起来像一个按钮,但实际上更像是一个图像。只有真正的按钮才有这个方法,但是你可以通过使用 CustomEvent 创建一个新事件并将其发送到按钮来人为地触发事件:.click()click

const btn = document.getElementsByClassName('lucide lucide-square')[0];

// example event handler
btn.addEventListener('click', function() {
  console.log('clicked');
});

var event = new CustomEvent('click');
btn.dispatchEvent(event);
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square" data-icon="Square" aria-hidden="true" focusable="false"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect></svg>

评论

0赞 George D 6/4/2023
谢谢,迈克尔。我试过了,但没有成功。我只从控制台收到“已点击”消息和“true”。
1赞 George D 6/4/2023 #2

所以我发布了@LouysPatriceBessette的答案,这对我有用

document.getElementsByClassName('lucide lucide-square')[0].parentElement.click()