1

以下を達成するための適切な方法は何ですか:

$("#btn").click(function1);

関数の呼び出し:

function function1 (event) {
    event.preventDefault();
}

これは機能しているようですが、 function1 がイベント引数が渡されずに参照しているものをどのように理解するのかわかりません。このように設定されたリスナーはもっと理にかなっていますか?

$("#btn").click(function1(event));

ここにフィドルがあります。

4

4 に答える 4

7

最初のパラメーターとして関数を除く jQueryの.click()関数。Javascript 関数には、値だけでなく、プリミティブ値またはオブジェクトもあります。関数は第一級市民です。

パラメータとして使用するfunction1(event)と、関数が実行されます。これは、関数名の後の括弧のセマンティックであるためです。そのため、.click()jQuery 関数は関数の出力を受け取りますが、これは予期された型ではありません。

関数名をパラメーターとして渡すということは、関数呼び出しの結果ではなく、関数 (実際には、関数への参照) を渡すことを意味します。クリックイベントがトリガーされると、関数が呼び出されます。この場合の関数を「コールバック」と呼びます。

クライアント側のスクリプトを使用する主な理由はイベント駆動型の動作であるため、Javascript ではコールバックが非常に重要です。

コールバックシステムのコンセプトは

//the click function
function doSomething(callback){
//in your case the event is the argument that jQuery will prepare for you
var argument = produceTheArgument();
//doSomething is in charge to invoke the function, passing the argument
callback(argument);
}

//your function
function myCallback(argument){
 //your function will consume the argument
}

//my callback is passed as a reference, not invoked
doSomething(myCallback);
于 2013-09-18T18:36:18.003 に答える
1

イベントをサブスクライブし、クリック リスナー内の関数への参照を渡します。jQuery イベント プロセッサは、jQuery のコンテキストで関数を呼び出し、すべてのパラメータをそれに渡します。

于 2013-09-18T18:29:17.090 に答える
1

最初の例では、JavaScript (およびその後 jQuery) がイベント情報をパラメーターとして渡すため、変数がであるfunction1ことを認識しています。event

これは、jQuery だけでなく、JavaScript の性質です。次の点を考慮してください。

document.getElementById('btn').addEventListener('click', function1, false);

function function1(e)
{
    console.log(e);
}

function1がクリックされるとJavaScript が自動的に呼び出さ#btnれ、最初のパラメーターとしてイベント情報が自動的に追加されます。jQuery は、この情報を独自のメソッドにも渡すだけで、アクセスできるようになります。

于 2013-09-18T18:38:38.263 に答える