2009-11-04 32 views
3

我正在使用jQuery token input plugin,并希望在添加令牌时更改其行为。jQuery插件:使用回调来改变插件行为

我添加了一个“onAddToken”回调到原来的代码,所以我可以看到当令牌被添加到输入框中,但我不知道如何从“URL /改变tokenInput的URL /呼叫“一个新的URL,”new/url/to/call“。

这个$此,并$(本)似乎并不管用。有什么建议么?

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(args) { 
      // alter tokenInput itself to use "new/url/to/call" instead of 
      // the original "url/to/call/" 
    } 
}); 

回答

3

问题是任何函数参数是本地类型(数字,字符串等),它们将通过值(复制)传递到被调用的函数。你想有一个通过引用传递的参数,并且在javascript中执行此操作的唯一方法是传递一个对象。

调用点(在插件)调用的函数是这样的:

config.onAddToken({url: myUrlVar}); 

然后在你的回调可以更改传入对象的url属性的值。

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(oUrl) { 
      oUrl.url = "mynew/url"; 
     } 
}); 

这是您想通过引用传递多个值,你的情况,但您可能只想拥有的任何URL值你想要的插件使用您的回调返回情况下非常有用,这使一些责任推开发人员知道要这样做,但可能会更容易。

为调用:

myUrlVar = config.onAddToken(myUrlVar); 

而且回调:

$("#input").tokenInput("/url/to/call", { 
     noResultsText: "No results yet. Type some more...", 
     searchingText: "Searching...", 
     onAddToken: function(oUrl) { 
      return "mynew/url"; 
     } 
}); 

或者你可以默认为只使用值,如果没有任何回调返回:

var newUrlVar = config.onAddToken(myUrlVar); 
if(newUrlVar) 
    myUrlVar = newUrlVar; 

如果回调函数没有返回值,那么它的值应该为空。

+0

非常感谢您的详细解答。我选择了第一个选项,这给了我最大的灵活性,并且完美运作。我甚至可以将插件的整个设置作为要修改的对象传回。再次,优秀的回应 - 谢谢! – 2009-11-04 12:41:29