2

私が立ち往生した場所:

余暇には、プライベート Web サイトで作業しています。私の独学は本当に構造化されておらず、基礎の大きな穴に突き当たりました。

jQuery API Web サイトserializeArrayの jQuery の例を見ていますが、ShowValues 関数について理解できません。

手順は次のとおりです。

function showValues() {
  var fields = $(":input").serializeArray();
  $("#results").empty();
  jQuery.each(fields, function(i, field){
    $("#results").append(field.value + " ");
  });
}

$(":checkbox, :radio").click(showValues);
$("select").change(showValues);
showValues();

そして、4行目と5行目を除くすべてで何が起こっているのかを理解できると確信しています:

  jQuery.each(fields, function(i, field){
    $("#results").append(field.value + " ");

jQuery はfields配列の各キーを調べ、見つけたものを汎用関数function(i,field) に入れます。

この関数は 2 つのパラメーターを使用して、#results に追加する文字列を生成します。

私の質問:

その関数に 2 つのパラメーターが必要なのはなぜですか? 関数が実行されるたびに、変数iはゼロからカウントアップするようです。関数から取り出された場合、field.value は undefined を返します。

2 パラメーター関数に渡される値は配列に配置されるため、関数は...配列の次元と一致する必要がありますか?

特別ですiか、それとも予備の変数を使用できますか?

そして、何が起こっているのfield.valueですか?.valuejQuery API にはありませんが、フィールド配列の 2 番目の位置からまだ値を抽出していると思いますか?

4

3 に答える 3

2

関数に 2 つのパラメーターが必要なのはなぜですか?

まず、.eachのドキュメントを読む必要があります。次のように定義された関数が必要であることを示しています。

callback(indexInArray, valueOfElement)

それは決まっているので、それを守らなければなりません(理由はこの答えを超えています)。

コールバックをそのように定義する場合

function(indexInArray, valueOfElement, foo) { ... }

そしてそれは次のように呼ばれます

callback(indexInArray, valueOfElement)

その後、foo未定義になります。

コールバックを次のように定義すると、

function(foo) { ... }

それはまだ呼ばれます

callback(indexInArray, valueOfElement)

-fooが含まれ、「」を省略した場合はもちろん未定義になりindexInArrayます。0.valuei

スペア変数を使用できますか?

はい、できます。_ほとんどの関数型言語では、気にしないパラメーターに使用されていることがわかります(underscore.jsただし、ライブラリを使用する場合は注意してください)。他の任意の名前を使用できます。

$(...).each(function(_, elem) {
  ...
});
于 2011-05-25T23:05:59.783 に答える
1

jQuery.each、配列またはオブジェクト内の各キーと値のペアに対して、指定した関数 (ここでは無名関数) を実行します。これは、関数型言語の反復によく似ています。

パラメータ名は特別なものでも必須でもありません。関数は現在の値を として呼び出されるthisため、多くの場合は省略できます。たとえば、コードで関数を に変更してfunction() { $("#results").append(this.value + " "); }も、同じ結果が得られます。

関数内にfieldDOMElementがあり、入力の属性.valueにアクセスするための DOM 0 プロパティです。value=あなたのコードでfield.valueは、 は と同等$(field).val()です。

于 2011-05-25T23:02:52.277 に答える
0

私は、配列内のどの値を関数で渡す/使用するかを判断するために、Jqueryの内部動作に渡されると信じています。i がなければ、Jquery は反復のどこにあるのかわかりません。

于 2011-05-25T22:56:25.167 に答える