次のような状況があるとします。
<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')領域外で呼び出すため、トリガーのクリック機能とは関係ありませんが、スクリプト部分がブラウザーによって実行されるとすぐに実行されます。