0

popup.html にボタンがあります。

<button id='test'>TEST BUTTON</button>

次に、この関数とリスナーを別の js ファイルに入れます。

function getAjax()
{
    chrome.tabs.executeScript(null, {code:"alert('works!')"});
}

document.addEventListener('DOMContentLoaded', function () {
    var buttons = document.querySelectorAll('button');
    for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', getAjax);
  }
});`

上のボタンを使用すると、関数が呼び出されます。ボタンを動的に生成すると、次のようになります。

var AJAXholder = document.getElementById("AJAXholder"); 
var button = document.createElement("button");
button.setAttribute("class", "app-buttons");                
button.setAttribute("id", ""+ objects[i].name +"");
button.setAttribute("name", ""+ objects[i].name +"");
    var buttonText = document.createTextNode(""+ objects[i].name +"");
    button.appendChild(buttonText);
AJAXholder.appendChild(button);

これらのボタンは正しく作成されますが、同じ機能を起動することはできません。それを機能させるためにできることはありますか?

編集:

次のように、新しいボタンを作成するときに、新しいイベント リスナーを追加しました。

var newlistener = document.getElementById(""+ objects[i].name +"").addEventListener('click', getAjax);

うまくいくようです。いずれにせよ、より良い方法を学ぶことを気にしないか、許可されたら削除することに投票します。

4

1 に答える 1

1

ボタン生成コードはDOMContentLoadedリスナー関数に含まれていますか? DOMContentLoadedそうでない場合は、ボタンを作成するために JS スクリプトが実行される前に起動していると思いquerySelectorAll('button')ます。ボタンがまだ存在しないため、空のリストが取得されます。DOMContentLoadedボタン作成スクリプトは、リスナー関数の後 (または、より良いのは関数内) で時系列に実行されるようにしてください。

于 2012-05-09T14:43:19.870 に答える