3

我正在使用jQuery 令牌输入插件,并希望在添加令牌时更改其行为。

我在原始代码中添加了一个“onAddToken”回调,因此我可以看到何时将令牌添加到输入框中,但我不确定如何将tokenInput的 URL 从“url/to/call”更改为新 URL ,“新/url/to/call”。

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/"
    }
 });
4

1 回答 1

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;

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

于 2009-11-04T02:12:18.133 回答