1

ページにボタンを追加し、onclick イベントを追加する chrome 拡張機能を作成しています。もっとボタンを追加したいので、動的にしたかった..

addAutoModButton('Auto-Moderate', 'moderate');

function addAutoModButton(name, onclickfunction)    {
    ...
    ...
    //creating a button and adding it
    var modbtn = document.createElement("input");
    modbtn.setAttribute('type','button');
    modbtn.setAttribute('value',name);
    title_header.appendChild(modbtn);

    modbtn.addEventListener("click", window["onclickfunction"], false);
    // thats what is not working

}

function moderate() {
    //do some stuff
}

提案?

4

2 に答える 2

2
  • 定義したパラメーターを使用する必要があります。

    function addAutoModButton(name, onclickfunction)    {
      ...
      modbtn.addEventListener("click", onclickfunction, false);
                                   ----^^^^^^^^^^^^^^^--
    
  • 名前ではなく、関数を渡します。

    addAutoModButton('Auto-Moderate', moderate);
                                   ---^^^^^^^^--
    

    ただし、関数をパラメーターとして渡す前に関数を定義する必要があります。


または、そのままにしておくこともできます (ただし、グローバル スコープに限定されます)。window に渡されるプロパティ名の引用符を外します。

modbtn.addEventListener("click", window[onclickfunction], false);
                                     ---^^^^^^^^^^^^^^^---

に静的に解決される前はwindow.onclickfunction、文字通り。

于 2012-12-03T13:48:47.130 に答える
0

関数は JS の第一級オブジェクトであるため、他の変数と同じように扱うことができます。

function someF(){}
function func2(argumentFunction)
{
    document.body.addEventListener('click',argumentFunction,false);//<-- use argument name
}
func2(someF);//<-- function someF will be used as callback

引数/変数は関数オブジェクトへの参照です。つまり、JS は関数の名前を実際には気にせず、変数が参照するものを調べます。この場合、引数は関数を参照し、他の場所で宣言されたが次のように渡されます。引数。純粋でシンプル

于 2012-12-03T13:49:41.097 に答える