我的问题可能看起来很奇怪,但我希望我的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();
但它返回一个未定义的元素......
答案 0 :(得分: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中提供。
答案 1 :(得分:-1)
试试这个:
function a(){
var injectionarea = document.getElementById('whereIwant');
injectionarea.innerHTML += "<button id=\"my_button\" onclick=\"doClick()\">Test</button>";
}
function doClick(){
//my stuff
}