1

我的问题可能看起来很奇怪,但我希望我的 javascript 代码能够单击我之前使用相同脚本在页面中注入的按钮。我试过这样的事情:

var injectionarea = document.getElementById('whereIwant');
injectionarea.innerHTML += "<button id=\"my_button\">Test</button>";

document.getElementById('my_button').onclick = function() {
                                                            //my stuff
                                                          };

my_button.click();

但它返回一个未定义的元素......

4

2 回答 2

2

您尝试执行的操作存在一些问题。作为一般规则,将 dom 控件作为字符串注入可能会发生一些奇怪的事情(例如,容器元素中的任何子节点都可能恢复到原始页面状态)。所以最好通过 document.createElement 函数来创建对象。

无论如何,在你的情况下,你只需要“等待”dom读取你的注入,解析它并创建元素(你应该自己做的事情,如上所述)。

所以,添加一个 setTimeout,就像下面的例子一样,可以让它工作,即使它不是我想看到的最干净的代码:

var injectionarea = document.getElementById('whereIwant');
injectionarea.innerHTML += "<button id=\"my_button\">Test</button>";

setTimeout(function(){
   document.getElementById('my_button').onclick = function() {
                                                            //my stuff
                                                          };

   my_button.click();
},0);

永远记住 JS 是单线程的,所以你所做的任何需要被 DOM 解析的编辑,在你释放你的工作线程之前在 DOM 本身中是不可用的。

于 2013-10-28T10:47:34.003 回答
-1

尝试这个:

function a(){
    var injectionarea = document.getElementById('whereIwant');
    injectionarea.innerHTML += "<button id=\"my_button\" onclick=\"doClick()\">Test</button>";
}
function doClick(){
//my stuff
}
于 2013-10-28T10:45:28.480 回答