1

定義済みの関数をイベント コールバックとして使用できないのはなぜですか?

<div id="me">
  <input>
</div>

$(document).ready(function(){
  // $("#me").on('keyup', 'input', doit()); # doesn't work
  // $("#me").on('keyup', 'input', 'doit'); # neither does this
  $("#me").on('keyup', 'input', function() {
    doit();
  }); // well, this one works of course
});

function doit() {
  console.log($("input").val());
}
4

4 に答える 4

8

関数をパラメーターとして渡す必要があります。

$("#me").on('keyup', 'input', doit);
于 2013-08-30T17:06:53.647 に答える
6

関数を呼び出すのではなく、関数を渡す必要があります

$("#me").on('keyup', 'input', doit)

それが間違っている理由を明確にするために、次の例を参照してください。

$("#me").on('keyup', 'input', (function() {
  doit();
})()); 

ここでは、無名関数を渡してすぐに呼び出していますが、これはイベント ハンドラーが期待するものではありません。

問題は、匿名かどうかの違いではなく、関数を渡すのではなく呼び出していることです。

于 2013-08-30T17:07:09.000 に答える
2

doit()コールバックとして( " " を使用して)を渡す()、実際にはその時点で関数が実行され、関数の戻り値(おそらくundefined) がコールバックとして渡されます。名前付き関数への参照のみを渡すとdoit、関数はコールバックとして実行されます。

于 2013-08-30T17:10:29.053 に答える
1

jsで something=function(){ blah } と言うと、それをテキストとして保存し、その場で解析します-そうです、できます。例えば:

CallMe = function(){ alert("blah!"); }
bobsCallback.setFunction( CallMe );

CallMe は他の変数と同様ですが、その内容は関数の js です。コールバックとして渡すか、次のように呼び出すことができます。

alert("calling CallMe...");
CallMe();
于 2013-08-30T17:10:06.827 に答える