Javascript 如果ID总是在更改,如何在特定元素上执行自动onclick()?

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_

在Javascript中,我试图创建一个用户脚本,该脚本将自动单击“蓝色按钮”。通常,我会这样做:

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标准。:-)