我正在使用jQuery token input plugin,并且想要在添加令牌时更改其行为.
我在原始代码中添加了“ onAddToken”回调,以便可以看到将令牌添加到输入框的时间,但是我不确定如何将tokenInput的URL从“ url / to / call”更改为新的URL,新/网址/拨打/致电”.
this,$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/"
}
});
最佳答案
问题在于,任何本机类型(数字,字符串等)的函数参数都将通过值(复制)传递给调用的函数.您希望有一个通过引用传递的参数,而在javascript中执行此操作的唯一方法是传递一个对象.
config.onAddToken({url: myUrlVar});
然后在您的回调中,您可以更改传入对象的url属性的值.
$("#input").tokenInput("/url/to/call",onAddToken: function(oUrl) {
oUrl.url = "mynew/url";
}
});
这在您要通过引用传递多个值的情况下很有用,但是在您的情况下,您可能只想让回调函数返回想要插件使用的任何url值,这给开发人员带来了一定的负担但这可能会更容易.
在呼叫站点:
myUrlVar = config.onAddToken(myUrlVar);
和回调:
$("#input").tokenInput("/url/to/call",onAddToken: function(oUrl) {
return "mynew/url";
}
});
或者,如果回调没有返回任何内容,则可以默认使用该值:
var newUrlVar = config.onAddToken(myUrlVar);
if(newUrlVar)
myUrlVar = newUrlVar;
如果回调函数中没有返回值,则其值应为null.