3

jQuery トークン入力プラグインを使用していますが、トークンが追加されたときの動作を変更したいと考えています。

元のコードに「onAddToken」コールバックを追加して、トークンが入力ボックスに追加されたときに確認できるようにしましたが、tokenInputの URL を「url/to/call」から新しい URLに変更する方法がわかりません。 、「new/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でこれを行う唯一の方法は、オブジェクトを渡すことです。

(プラグイン内の)callsiteで、次のような関数を呼び出します。

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である必要があります。

于 2009-11-04T02:12:18.133 に答える