0

ボタンが付いたjqueryダイアログがあります(ダイアログボタンの1つではなく、私のボタン)。

ダイアログが設定された後、次のコードがあります。

$('#bar').click(foo('baz'));

ページを読み込んでダイアログを表示すると、fooが実行されます(#barを押さずに)。

コードが次の場合:

$('#bar').click(foo);

また

$('#bar').click(function(){foo('baz')});

fooは実行されません。

何故ですか?ありがたいことに、RTFMが必要な場所へのポインタ。

明確にするために、ボタンが押されていない状態で(つまり、ダイアログの初期化時に)fooが最初に実行され、後の2つの例でfooが実行されないのはなぜですか。

ああ、私はちょうどそれを解決したと思います。

1.では、fooの結果がクリックに渡されています。2.ではまだわかりません。3.ではanon関数がクリックに渡されています。

4

1 に答える 1

3

これはクリックが呼び出されるのを待ちませんfoo

$('#bar').click(foo('baz'));

foo('baz')ユーザーがクリックしたときではなく、この行が実行されたときに実行されます#bar

これは引数をに渡しませんfoo

$('#bar').click(foo);

これはおそらくあなたが必要とするものです(foo関数をビルドして返す場合を除いて、私はそうではないと思います):

$('#bar').click(function(){foo('baz')});

それが機能しないという事実は、idを持つ要素がbar見つからないか、クリックしない可能性があります。


詳細な説明:

実行すると

foo(bar); 

foo引数を指定して実行しますbar

実行しますか

a = foo;

変数aに値を指定します。値fooは関数である場合とそうでない場合があります。

電話するとき

var a = function() {foo(bar)};

呼び出されたときに実行される新しい無名関数を作成し、foo(bar)この新しい関数を変数の値として指定しますa

実行すると

$('#bar').click(function(){foo('baz')});

foo('baz')の引数として、呼び出されたときに呼び出す新しい関数を渡します$('#bar').click(。idを持つ要素をクリックすると、JQueryはこの関数を呼び出しますbar

于 2013-01-12T11:42:23.633 に答える