jQuery插件:使用回调来改变插件行为

时间:2009-11-04 01:56:07

标签: jquery jquery-plugins jquery-callback jquery-chaining

我正在使用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/"
    }
 });

1 个答案:

答案 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。