Javascript 如果ID总是在更改,如何在特定元素上执行自动onclick()?
在Javascript中,我试图创建一个用户脚本,该脚本将自动单击“蓝色按钮”。通常,我会这样做:Javascript 如果ID总是在更改,如何在特定元素上执行自动onclick()?,javascript,Javascript,在Javascript中,我试图创建一个用户脚本,该脚本将自动单击“蓝色按钮”。通常,我会这样做: var bluebutton = "document.getElementById("blue_button")" if (bluebutton) { bluebutton.onclick(); } 但是现在,蓝色按钮没有自己的明显ID。它的ID是随机的,可以是button1、button2或button3 下面是我所说的HTML: <div class="button_
var bluebutton = "document.getElementById("blue_button")"
if (bluebutton) {
bluebutton.onclick();
}
但是现在,蓝色按钮没有自己的明显ID。它的ID是随机的,可以是button1、button2或button3
下面是我所说的HTML:
<div class="button_slot">
<div id="button1" style="cursor:pointer; padding-left:30px" onclick="buttonsubmit('button1')" onmouseover="infopane.display('Blue Button','I'm a blue button!')" onmouseout="infopane.clear()">
<div class="button_slot">
<div id="button2" style="cursor:pointer; padding-left:30px" onclick="buttonsubmit('button2')" onmouseover="infopane.display('Red Button','I'm a red button!')" onmouseout="infopane.clear()">
<div class="button_slot">
<div id="button3" style="cursor:pointer; padding-left:30px" onclick="buttonsubmit('button3')" onmouseover="infopane.display('Yellow Button','I'm a yellow button!')" onmouseout="infopane.clear()">
经过一番阅读,我得出结论,将onclick()指向正确元素/字符串的唯一方法是使用“.toString().match(name)”,如下所示:
function clickbutton(name) {
var button_list = document.querySelectorAll('.button_slot > div');
for (var i=0; i<button_list.length; i++) {
var button = button_list[i];
if (button.onmouseover && button.onmouseover.toString().match(name)) {
button.onmouseover();
button.onclick();
break;
}
}
}
clickbutton('Blue');
功能点击按钮(名称){
var button_list=document.querySelectorAll('.button_slot>div');
对于(var i=0;i我非常确定您想要使用indexOf,尽管我认为这很可能是一个时间问题
首先,试着在setTimeout函数中调用它,这样当你执行时,文档就(可能)被完全加载了
setTimeout(函数(){clickbutton(name)},3000);
我会:
var clickButton = function(name){
var button_list = document.querySelectorAll('.button_slot > div');
for(var i = 0; i < button_list.length; i++){
var button = button_list[i];
if(button.getAttribute('onmouseover').indexOf(name) !== -1){
button.onclick.apply(); // They seem to have parameters in your example?
}
break;
}
}
setTimeout(function(){ clickButton('blah') }, 3000);
var clickButton=函数(名称){
var button_list=document.querySelectorAll('.button_slot>div');
对于(变量i=0;i
作为第一次尝试…首先,我不确定为什么你不能给每个按钮一个与其颜色对应的ID,因为我相信这是实现这一点的最简单的方法。但是假设,出于某种原因,你的按钮ID必须随机化(或者就这一点而言,他们甚至没有ID)
在本例中,我要做的是为每个按钮提供一个数据按钮类型
属性,例如:
<div data-button-type="Blue" id="..." style="..." onclick="..." onmouseover="..." onmouseout="...">
现在,我可以在查找要单击的按钮时检查属性,例如:
function clickbutton(name) {
var button_list = document.querySelectorAll('.button_slot > div');
for (var i=0; i<button_list.length; i++) {
var button = button_list[i];
if (button.getAttribute('data-button-type') == name) {
button.onmouseover();
button.onclick();
break;
}
}
}
clickbutton('Blue');
功能点击按钮(名称){
var button_list=document.querySelectorAll('.button_slot>div');
对于(var i=0;i您的前两个代码块包含无效代码。谢谢!我将尝试超时,我非常确定您对发生的事情的看法是正确的,因为我的问题是一个简单的计时问题。我可以问另一个问题吗?在我的特定情况下,indexOf如何工作?我实际上从未使用过该方法。假设这就是问题,那么h我相信Andrew在这里找到了一些东西,你可以把这个代码粘贴到body标签的onload事件中,而不必做3秒钟的超时。或者无论如何,也可以做类似的事情。indexOf只检查另一个字符串中是否存在一个字符串,如果它不存在,则返回-1。如果它存在,则返回位置(这将是>=0)。建议不错,但如果可以的话,我想建议一个小的增强:命名自定义属性数据按钮类型,您甚至可以遵循HTML5标准。:-)