2016-06-12 13 views
0

私はjQueryを使ってJavaScriptオブジェクトにフォームデータを変換する方法を探していたと私は、このスレッドに出くわした:Convert form data to JavaScript object with jQuery 最も人気のある答えはそれでこのコードを持っていますがjQueryの/ JavaScriptコードの説明

$.fn.serializeObject = function() { 
     var o = {}; 
     var a = this.serializeArray(); 
     $.each(a, function() { 
      if (o[this.name] !== undefined) { 
       if (!o[this.name].push) { // ??? 
        o[this.name] = [o[this.name]]; 
       } 
       o[this.name].push(this.value || ''); 
      } else { 
       o[this.name] = this.value || ''; 
      } 
     }); 
     return o; 
}; 

コードの一部は、

if (!o[this.name].push) { 
    o[this.name] = [o[this.name]]; 
} 

オブジェクトがプッシュという名前のプロパティを持っていない(私は間違いだと思う)私が何をしているかの正確わからないということであります。 JS配列のメソッド.push()は、要素を配列にプッシュするだけでなく、配列内の要素の数を返しますが、この場合は、それ以外の中括弧はありません。ご覧のとおり、oがオブジェクトです。私はconsole.logでこのコードを試しましたが、決して実行しません。このif文の目的は何ですか?このコードは他のスレッドにもありますので、このコードの作成者が誰かわかりません。

はそれがo[this.name]場合をチェックする愚かな方法です事前

+0

1がのJavaScript/jQueryの関連すべてに該当すること、タイトルがより記述してください。 – JackHasaKeyboard

答えて

1

にありがとう配列されて:あなたは、同じ名前を持つ乗算フォーム要素を持っている場合は、この理由は、しかしある

if (!$.isArray(o[this.name])) { 
    o[this.name] = [o[this.name]]; 
} 

<input type="checkbox" name="a[]" value="1"> 
<input type="checkbox" name="a[]" value="2"> 

出力が文字列ではなく配列に変換されている場合:

{ 
    "a": ["1", "2"] 
} 

一方のみがチェックされている場合:

{ 
    "a": "1" 
} 
+0

しかし、説明のおかげでそれは(私が何かを紛失していない限り)質問に答えることはありません。 –

+0

@EfthyvoulosTsouderosあなたはそれが何をしているのか、それが必要なのかを尋ねていますか?そして、なぜそれが必要なのかの例をあなたに伝えます。私は何かを逃していますか? – andlrc

+0

私は今それを持っていると思う、プロパティ(配列メソッドのプッシュ)が配列の場合。そうですか? –