0

最初の方法は機能するが、2番目の方法は機能しないのはなぜですか?

最初のメソッドを使用して関数にイベントを渡すことができるのに、2番目のメソッドを使用できないのはなぜか困惑しています。私にとって、これらは同じように機能するはずです。マウス座標の取得に大まかに基づいています。

これは機能します:

document.onclick = function (e) {
  var x = e.pageX;
  var y = e.pageY;
  console.log(x);
};

これは動作しません。「UncaughtReferenceError:zisnotdefined」を返します。

document.onclick = mousePosition(z);

function mousePosition (e) {
  var x = e.pageX;
  var y = e.pageY;
  console.log(x);
};
4

3 に答える 3

3

2番目の方法では、関数を呼び出しており、イベントアクションをそのように定義していないためです。代わりにこれを試してください:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = function(z){
    mousePosition(z);
}

またはまた:

function mousePosition (e) {
    var x = e.pageX;
    var y = e.pageY;
    console.log(x);
};
document.onclick = mousePosition;
于 2012-08-24T01:07:51.670 に答える
1

onclickイベントハンドラーに関数参照を渡す最初のもの。2番目にmousePosition(z)を呼び出して、結果をonclickハンドラーに割り当てようとしています。これはあなたが望むものではありません。

于 2012-08-24T01:07:53.207 に答える
0

他の答えが述べたように、あなたのコードは:

document.onclick = mousePosition(z);

未定義の変数を渡して、関数を呼び出しています。あなたがすべきことは、への参照を渡すことです:mousePosition()zmousePosition

document.onclick = mousePosition;   // note: no parentheses

「最初のメソッドを使用して関数にイベントを渡すことができる理由に困惑しています」

実際、関数にイベントを渡してません。、という名前の1つの引数を持つ無名関数を宣言し、その関数を参照するようeに設定document.onclickしています。

イベントが発生すると、ブラウザは関数を呼び出し、使用しているブラウザによってはイベントオブジェクトを渡す場合があります。IEはイベントオブジェクトをパラメータとして渡さず、プロパティを介して利用できるようにしますwindow.event

ブラウザは、引数を明示的に宣言したかどうかをどちらの方法でも気にしません。実際、宣言しなくても、argumentsオブジェクトを介して渡されたパラメータにアクセスできます。

于 2012-08-24T01:58:33.457 に答える