0

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

var bluebutton = "document.getElementById("blue_button")"

if (bluebutton) {
    bluebutton.onclick();
    }

但是现在,蓝色按钮没有自己明显的 ID。它的 ID 是随机的,可以是button1button2button3

这是我正在谈论的 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');

(注意:有时我使用clickbutton('Red');clickbutton('Yellow');只是为了体验)

现在问题来了。这种方法非常有效......有时,我的脚本完全错过了按钮(例如,没有点击任何东西)即使其中肯定有一个带有单词“Blue”的字符串。

如果有人能找出我做错了什么,或者甚至提出更有效的方法,我将不胜感激!谢谢!

4

2 回答 2

1

首先,我不确定为什么不能给每个按钮一个与其颜色相对应的 ID,因为我相信这将是实现这一目标的最简单方法。但是假设由于某种原因,您的按钮 ID 必须是随机的(或者就此而言,它们甚至可能没有 ID)。

在这种情况下,我要做的是给每个按钮一个data-button-type属性,例如:

<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');
于 2013-07-27T15:25:33.180 回答
0

我很确定您想使用 indexOf 尽管我认为它很可能是时间问题。

首先尝试在 setTimeout 函数中调用它,这样文档在您执行时(可能)已完全加载。它会解释它有时工作有时不工作。

setTimeout(function(){ 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); 

作为第一次尝试...

于 2013-07-27T15:10:39.300 回答