我正在使用jQuery token input plugin,并希望在添加令牌时更改其行为。
我在原始代码中添加了一个“onAddToken”回调,因此我可以看到将一个标记添加到输入框的时间,但我不知道如何更改 tokenInput 的URL“ url / to / call“to new URL,”new / url / to / call“。
此, $ this , $(this)似乎无效。有什么建议吗?
$("#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/"
}
});
答案 0 :(得分: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;
如果回调函数没有返回值,那么它的值应为null。