2009-11-04 59 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