2012-04-11 18 views
1

我在單個頁面上有多個<form>,全部具有唯一的ID,並且表單主體如下所示。

<form id="form-main"> 
    <table> 
     <tr> 
      <td><input type="text" name="field1"/></td> 
       . . . . . . . 
       . . . . . . . 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td><input type="text" name="field2"/></td> 
       . . . . . . . 
       . . . . . . . 
     </tr> 
    </table>  
</form> 

<form id="form-second"> 
    <table> 
     <tr> 
      <td><input type="text" name="field3"/></td> 
       . . . . . . . 
       . . . . . . . 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td><input type="text" name="field4"/></td> 
       . . . . . . . 
       . . . . . . . 
     </tr> 
    </table> 
</form> 

我知道這是不推薦使用表格具有對齊的表單字段和一個可以用CSS做到這一點,但實際的問題是,當我使用$("#form-main").serializeArray,我應該得到這種形式的所有字段在我數組對象,但在這裏我只獲得表格中第一個表格的字段,其餘的輸入被忽略。

這是一個有效的行爲serializeArray()?或者我使用表格是真正的問題?我可以使用div而不是表格,但這是我的最後一個選項。此外,在這些多種形式中,第一個表的字段必須填寫,因此除了「驗證即用型」方法外,我還會遍歷這些必填字段以檢查它們是否爲空,所以是爲什麼只有每個表單的第一個表格被包含在數組對象中的原因。

+3

'我知道不建議使用表格來對齊表格字段... ...從什麼時候開始?當然,CSS可以工作,但有時候,簡單是關鍵。不要讓「討厭的人」在你身上。一張格式良好的表格沒什麼問題。 – SpYk3HH 2012-04-11 14:57:21

+1

第二個表中的所有字段是否都使用與第一個表中的屬性相同的'name'屬性? – 2012-04-11 14:57:41

+2

2個事情檢查btw,1)是你的形式完全包裝表,2)做所有輸入,選擇,文本框有一個'名稱'屬性? – SpYk3HH 2012-04-11 14:58:17

回答

2

這是serializeArray的一個完全有效的用法,它也應該與多個具有相同名稱的元素一起工作。我只是做了一個快速測試(http://jsfiddle.net/Q5s5V/),一切都如預期的那樣......我認爲你的代碼還有其他錯誤。

你可以嘗試的一件事情是選擇輸入本身而不是形式,並參見1)你是否擁有所有期望的輸入,以及2)該集合是否正確序列化。

var $elements = $('#form-main :input'); 
console.log($elements.length); 
console.log($elements.serializeArray()); 

我的猜測是有一個標記錯誤(未封閉的標記或任何),阻止這些元素被選中。

+0

我不知道我錯過了什麼,但是當我重寫JS代碼中的$ .merge()'d個別窗體的所有數組對象爲單個對象並將其再次轉換爲JSON以通過發送方式'$。阿賈克斯()'。謝謝.... – Kushal 2012-04-11 16:54:02

+0

我在這裏面臨着同樣的問題,但在我的情況有點像::

<! - DIV的結束 - >
(其實在我使用JavaScript設置(某些功能)我不是值最後兩個元素從用戶處獲得價值這是問題 – 2013-10-20 13:09:29

+0

@ShyamDixit,你的問題就是你的html的結構,在關閉表單之前你不能關閉第一個div。 'll be ok。'

<! - end of div - >
' – Prestaul 2014-01-06 23:53:28

0

我知道這是一個老問題,但我很驚訝沒有看到正確的答案。問題是你在頁面上有兩種形式,而不是一種。如果使用$(「#form-main」)。serializeArray將只包含field1和field2,則serializeArray()將只對您指定的表單標記內的字段起作用。

Field3和field4不包含在內,因爲它們不在#form-main中,它們在#form-second中。

相關問題