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 に答える