次のような状況があるとします。
<a href="#" id="trigger">CLICK ME</a>
と
var x = alert("test");
$('#trigger').click(function() {
x
});
x
ボタンを押している間ではなく、ページの読み込み時に発火するのはなぜですか? 変数を関数に配置すると機能することはわかっていますが、その理由はわかりません!
次のような状況があるとします。
<a href="#" id="trigger">CLICK ME</a>
と
var x = alert("test");
$('#trigger').click(function() {
x
});
x
ボタンを押している間ではなく、ページの読み込み時に発火するのはなぜですか? 変数を関数に配置すると機能することはわかっていますが、その理由はわかりません!
var x = alert("test");
これが実行さalert("test")
れ、その式の値が に代入されx
ます。(alert
何も返さないので、x
に設定されundefined
ます。)
代わりに、次のコードを使用します。
var x = function() {
alert("test");
}
$('#trigger').click(function() {
x(); //remember to actually call it!
});
いくつかのより良い方法を次に示します。
$('#trigger').click(x); //no need to wrap in function if it does not have
//any arguments
$('#trigger').on('click', x); //using on
この行で
var x = alert("test");
実際に関数を呼び出し、その戻り値を変数 x に入れます。Asalert()
には戻り値undefined
がなく、実際には何も格納されていませんx
。
そのため、次にアクセスx
するときはまだ空であり、関数へのポインターなどは含まれていません!
var x = alert("test");
はすぐに関数を呼び出し、alert("test")
戻り値を に代入しx
ます。
希望する動作を得るために、アラートの呼び出しを関数でラップできます。
var x = function() {
alert("test");
}
後で呼び出すには、括弧 (パラメーター リスト) を使用します。
$('#trigger').click(function() {
x();
});
alert("test")
アラートメッセージを表示する機能です。この関数は$('#trigger')
領域外で呼び出すため、トリガーのクリック機能とは関係ありませんが、スクリプト部分がブラウザーによって実行されるとすぐに実行されます。