2011-04-27 66 views
0

我有一個複雜的屏幕,它使用一個嵌套表格和幾個表格分別列出ajaxSubmit表單上提交的數據缺失:一個表格中有多個表格

雖然我相信問題最初是由jQuery引起的,但我不得不發現我的HTML結構導致了問題。我的初始結構是:

<table> 
    <tr> 
     <form id="foo1" ..> 
      <td><input ..></td> 
      <td><input ..></td> 
     </form> 
    </tr> 
    <tr> 
     <form id="foo2" ..> 
      <td><input ..></td> 
      <td><input..></td> 
     </form> 
    </tr> 
</table> 

這適用於IE8和Chrome 11,但不適用於FF3.6和4各自的Safari 5.0.4。

謝謝大家的幫助和抱歉指向錯誤的方向!

+0

您可以#之前跳過形式,jQuery將使用文檔。 getElementById如果只提供了一個#id選擇器,那就是你可以擁有的fastes選擇器。我不知道它是否可以優化代碼中的表單。 – 2011-04-27 20:38:03

+0

不應該是'$('#allCategories')。html(response);'? – 2011-04-27 20:43:22

+0

@ŠimeVidas:對不起,這是我的錯誤,由於複製和粘貼 – MrG 2011-04-27 20:48:12

回答

0

這種行爲是在舊的HTML規範或支持至少容忍。這在後面的實現中發生了變化。因此,人們應該:

一)使用幾個表(每形式之一)

<form id="foo1"> 
    <table ..> 
    </table> 
</form> 
<form id="foo2"> 
    <table ..> 
    </table> 
</form> 

B)使用的DIV,而不是表

+0

它從來沒有被舊的HTML規範所支持或容忍,只有一些實現。 – Quentin 2011-05-03 10:55:14

0

我認爲這是一個範圍界定問題。嘗試:

data: $(this).serialize(), 
+0

不是,看起來不像它... – 2011-04-27 20:42:31

0

試試這個:

function updateCategory(id) { 
    var form = $('#sc' + id); 

    form.ajaxSubmit({ 
     data: form.serialize(), 
     type: 'post', 
     url: '?action=modCat', 
     success: function(response) { 
      $('#allCategories').html(content); 
     } 
    }); 
} 
+0

不,不幸的是,行爲依然是相同:在初始頁面加載後正常工作,但在稍後嘗試時失敗。 – MrG 2011-04-27 22:00:54

+0

@MrG *「在初始頁面加載後正常工作」* - 您是什麼意思?你是否在頁面加載時調用'serialize()'? – 2011-04-27 22:38:08

+0

當我通過瀏覽到「http:// server/url」加載網站時,所有表單都可以正確提交併刷新例如#allCategories的內容。但是,如果我嘗試再次提交任何表單,它將不傳輸數據,儘管HTML有效並且表單包含字段和值。我假定選擇器內的某些內容出錯了,因爲如果我在'ajaxSubmit'之前插入'alert($(「form#sc」+ id).serialize())'',它會輸出一個空警報。 – MrG 2011-04-28 08:42:57