1

入力フィールドがあります。ページが読み込まれるときに、入力が事前入力されている場合は、AJAX呼び出しを行います。それ以外の場合は、入力フィールドが変更されるまで待ってAJAX呼び出しを行います。

私のAJAX呼び出しは非常に複雑なので、これら2つのシナリオで同じ機能を共有する必要があります。

これが私の実装(擬似コード)です:

 function checkInput { $.ajax(... complex logic goes here ...); }

  $(document).ready(function() {
    if (!!$("#input").val()) {
      checkInput();    
    }
  });

  $("#input").change(checkInput());

問題は、関数checkInputがすぐに呼び出されることです。

この問題を回避するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

2

関数を渡します。呼び出さないでください

 $("#input").change(checkInput);

あなたがしているとき、あなたは関数checkInput()を呼び出していcheckInputます。JavaScript関数はファーストクラスのオブジェクトであり、他のタイプと同じようにそれらを渡すことができます。

于 2013-03-19T00:45:53.147 に答える
1

関数がすぐに呼び出される理由は、ここに到達したときに式が評価されるためです。

$("#input").change(checkInput());

評価されるためにコールバック関数checkInput()が実行されることに注意してください。別のアプローチはこれを行うことです:

$("#input").change(function(){checkInput();});

これにより、最初にイベントとして接続されたときではなく、呼び出されたときに関数を実行できるようになります。

于 2013-03-19T00:49:20.303 に答える