1

我有一个输入字段。加载页面时,如果输入已预先填充,则进行 AJAX 调用。否则,请等到输入字段更改后再进行 AJAX 调用。

我的 AJAX 调用相当复杂,所以我希望这两个场景共享相同的功能。

这是我的实现(伪代码):

 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 回答