2016-06-12 56 views
0

我一直在尋找一種方式來表單數據JavaScript對象轉換與jQuery和我碰到這個線程傳來: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語句的目的是什麼?此代碼也在其他線程中,因此我不確定此代碼的作者是誰。

預先感謝您

+0

請把標題更具描述性的,即一個人的適用於相關的一切的JavaScript/jQuery的。 – JackHasaKeyboard

回答

1

這是檢查是否o[this.name]一個笨的辦法是一個數組:

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

好吧我想我現在得到它,如果它有屬性(數組方法推)是一個數組。是對的嗎? –