ページの読み込み時にクリック イベント ハンドラーがすぐに起動するのはなぜですか? 質問する

ページの読み込み時にクリック イベント ハンドラーがすぐに起動するのはなぜですか? 質問する

すべてのリンクにバインドしたい関数を試しています。現時点では、関数はリンクをクリックしたときではなく、ページが読み込まれたときに実行されます。

これが私のコードです。(必要な場合は、関数を投稿できますshowDiv()。) ここで私が何か間違ったことや愚かなことをしているかどうかわかりますか?

$(document).ready(function(){

    $('a.test').bind("click", showDiv());

});

ありがとう!

ベストアンサー1

あなたは参照関数の実行結果ではなく、コールバックとして関数に渡されます。

showDiv()何らかの値を返します。returnステートメントが使用されなかった場合は、undefinedが返されます。

showDiv実行される関数への参照です。

これは動作するはずです:

$(document).ready(function() {
  $('a.test').on("click", showDiv); // jQuery 1.7 and higher
  $('a.test').bind("click", showDiv); // jQuery 1.6 and lower
});

あるいは、匿名関数を使用して、より高度な機能を実行することもできます。

// jQuery 1.7 and higher
el.on('click', function() {
  foo.showDiv(a, b, c);
  // more code...
});

// jQuery 1.6 and lower
el.bind('click', function() {
  foo.showDiv(a, b, c);
  // more code...
});

状況によっては欲しい関数によって返された値をコールバックとして使用するには:

function function foo(which) {
  function bar() {
    console.log('so very true');
  }

  function baz() {
    console.log('no way!');
  }

  return which ? bar : baz;
}

el.click(foo(fizz));

この例では、fooは を使用して評価されfizz、クリック イベントのコールバックとして割り当てられる関数を返します。

おすすめ記事