6

JQueryでは、オプションの引数をスキップして次の引数を渡すことは可能ですか?はいの場合、jquery関数はどの値がどのパラメーターに対応するかをどのように決定しますか?

例:

//
// function signature is
// jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
//
// function is called as
//
$.get('ajax/test.html', function (data) {
    $('.result').html(data);
    alert('Load was performed.');
});

URLの後に$.get()を呼び出すと、[、data]がスキップされ、次に成功コールバックが渡されます。

4

3 に答える 3

7

はい、途中からでもオプションの引数をスキップすることができます。jQueryは引数のタイプを調べて、どれがどれであるかを判別します。の署名を見てくださいjQuery.load

.load(url [, data] [, complete(responseText, textStatus, XMLHttpRequest)])

そして、次の作業は期待どおりです。

.load("test.php")
.load("test.php", {foo: bar})
.load("test.php", {foo: bar}, function(){})
.load("test.php", function(){}) // you skipped the 2nd parameter? no.

string3つのパラメータが、、objectおよびであることに気付くでしょうfunction。関数内で、jQueryは渡された引数の数とそのタイプを簡単に確認できます。2番目のパラメーターが関数であることに気付いた場合、dataパラメーターがスキップされたと見なされ、それに応じて動作します。

驚いたことに、jQuery.loadまったく異なることを行う別の署名を持つ別の関数があります。

.load(handler(eventObject))
.load([eventData], handler(eventObject))

繰り返しますが、jQueryは引数を調べることで、起動するメソッドを決定できます。

于 2012-08-25T21:59:40.700 に答える
1

あなたが慣れているかもしれないようにではありません。一部の関数は、次のようなオプションのオブジェクトを受け取る場合があります$.ajax

$.ajax({
    url: 'whatever',
    data: {some: 'thing'}
});

とは対照的に:

$.ajax('whatever', {
    data: {some: 'thing'}
});

前者の形式を使用すると、URLを省略して、デフォルトを使用できます。(最良の例ではありませんが、jQueryのすべての中で私が考えることができるのはこれだけです。特定のケースを念頭に置いていますか?)

于 2012-08-25T22:00:00.903 に答える
1

これはjQueryの問題ではありません。これは、JavaScript自体の機能と関係があるためです。jQuery関数は引数を利用して作成されました。関数に渡される引数には型があります。これらの引数がどのタイプであるかをテストできるため、それらが何に使用されているかを判断できます。

function foo( show, text ) {

    if ( typeof show === "function" ) show( text );

    else if ( !show ) alert( text );

}

typeofタイプを見つけるために使用します。引数が関数呼び出しから除外されている場合、その型はundefinedです。undefined偽物のタイプです。他の偽のタイプは、、、、0falseNaN文字列("")、およびnullです。論理NOT演算子を使用して、変数の偽りをテストできます!

次に、それが関数であることがわかっている場合は、showそれを関数として使用し、引数を指定して呼び出すことができますtext

foo(function (text) { alert(text); }, "Hello World"); // alerts "Hello World"
于 2012-08-25T22:23:27.507 に答える