1

パラメータなしでイベントハンドラを割り当てると、機能します:http: //jsfiddle.net/mUj43/

function show(){
    alert('work');
}

var myButton = document.createElement("input");  
myButton.type="button";  
myButton.value="click";   
myButton.onclick=show;

var where = document.getElementById("where");
where.appendChild(myButton);  ​

しかし、パラメータを渡しても機能しません:http: //jsfiddle.net/mUj43/1/

myButton.onclick = show('test');

動的に作成された要素のパラメーターで関数を使用するにはどうすればよいですか?

4

4 に答える 4

7

それはできません。新しい関数を作成して部分適用を使用し、それをイベントハンドラーとしてアタッチすることができます。

myButton.onclick=show.bind( myButton, 'test');

http://jsfiddle.net/mUj43/2/

ドキュメント(この関数は他の多くのことにも役立つため、読むことをお勧めします)と互換性情報:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

于 2012-08-19T15:07:19.510 に答える
3

独自のクロージャーを作成する必要があります。

myButton.onclick = function () {
    show.call(this, 'test');
};

@Esailijaのbind方法を使用することもできますが、これはより深いブラウザーサポートを備えています。

于 2012-08-19T15:08:41.343 に答える
2

試す:

myButton.onclick = function(){show("test");}

また :

myButton.onclick = function(){ show.call( this, "test");}

show関数内に要素オブジェクトコンテキストを保持する場合

于 2012-08-19T15:08:28.980 に答える
0

これは、イベントを追加するときに関数参照が必要になるためです。

最初の例でshowは、は関数への参照です。

2番目の例でshow('test')は、関数の呼び出しですshow。これは何も返しません。また、関数参照ではないものはありません。

そのため、ページをロードすると「work」(関数が呼び出されます)と警告されますが、ボタンをクリックしても関数は呼び出されません。

次に、関数が必要です。

あなたはそれを宣言することができます:

myButton.onclick=f;
function f(){
   show('test')
}

または、匿名のものを使用できます。

myButton.onclick=function(){
   show('test')
}
于 2012-08-19T15:15:48.733 に答える