在Jquery / Javascript中传递函数

时间:2010-09-21 14:20:28

标签: javascript jquery

下午好人的

我已经在我的网站上构建了一个jquery插件。该插件适用于暗示输入框,工作正常。

我需要添加的一件事是能够在其配置中传递一个函数,以应用于为建议提供的ajax调用的响应。我在可信赖的旧谷歌上找不到任何关于如何传递函数并将它们应用于插件范围的内容。

我需要这个,因为一些响应更新了一个字段,一些更新了2个或更多字段,并且响应中保存了不同的文本,我不想继续复制插件以允许这种情况发生。我假设javascript方法“apply”是我需要看的,但我完全糊涂了

这对我想要做的事情是否有意义?如果是这样,任何人都可以帮助或指出我正确的方向。

提前致谢

亚历

3 个答案:

答案 0 :(得分:2)

您正在寻找.call().apply()。您可以将上下文(即范围)作为第一个参数传递给两者。 .call()的作用如下:

yourCallback.call(this, param1, param2);

虽然.apply()的工作原理如下:

yourCallback.apply(this, [param1, param2]);

.apply()在动态生成参数时非常有用。

答案 1 :(得分:1)

我建议您利用jQuery UI团队所做的精彩工作。该API经过深思熟虑,可以为您提供所需的一切。

http://docs.jquery.com/UI/Autocomplete

答案 2 :(得分:1)

Javascript有闭包。如果您定义这样的函数:

{
   var a;

   function myFn() {
      b = a; // a is set
   }

   $('.c').autocomplete({callback: myFn});
   ...

这通常足以处理这种情况。在您的设置代码中,包含对作为局部变量所需的任何内容的引用,即使函数本身脱离上下文,它们也将存在。这对于不习惯它的人来说有点奇怪,但功能强大且有用。

某些插件提供了您可以设置的“上下文”变量,并将在您的回调中显式返回给您。检查文档以查看是否存在。

最后,您可以使用apply更改调用函数的this。 Javascript中的函数(通常)是独立的实体,可以调用单个函数,并将this设置为任何类型的值。在回调的情况下,有时需要包装给定的回调并在正确的上下文中调用它。这看起来像myFn.apply(newThis, params)。您实际上正在调用函数对象上的apply函数,并为其提供其上下文和参数。

希望这有帮助。