2011-09-28 114 views
10

試圖序列只是從特定的表中的元素,但它只返回一個結果,如果我做全Form序列化,而不是整個表格

在下面的代碼

,我只想阿賈克斯在tbl2的元素

<form> 
<input type="text" id="tb1" name="tbl1"/> 
    <table name="tbl1"> 
    <tr><td><input type="text" name="tb2"/></td></tr> 
</table> 
<table name="tbl2"> 
    <tr><td><input type="text" name="tb3"/></td></tr> 
    <tr><td><input type="text" name="tb4"/></td></tr> 
</table> 
</form> 

代碼

var params = $("#tbl2").serialize(); 

var resp = $.ajax({ 
    async: false, 
    type: "POST", 
    url: AppRoot + "webhandlers/postback.ashx", 
    data: params 
}); 

回答

17

首先,一個<table>不能有name屬性,即使它可以,jQuery ID selector#)不會匹配它。

如果使用id代替(<table id="tbl2">),它的工作是這樣的:

var params = $("#tbl2 :input").serialize(); 

:input選擇器選擇所有的表單元素(在這裏,裏面#tbl2),這是必要的,因爲serialize()只會工作的那些。

請查看我的jsFiddle Demo

+0

不工作? '$(tableID).seralize()'? – Deeptechtons

+0

@Deeptechtons您可以在我發佈的小提琴中嘗試它,但我向你保證它不起作用。 – kapa

+1

我實際上在我的代碼中有id,當我在這個問題中編寫代碼時,我一定誤會了名字。抱歉。 – Christian

1

你不能serialize一個表 - 該方法不適用於那種DOM對象,只有表單和表單字段可以被序列化。

如果你真的想要做你正在提出的建議,你需要正確的選擇器來挑選tbl2的子表單元素,然後你必須手動序列化每一個子表單。有人在另一個問題,在這裏:serialize without a form?

更好的辦法可能是禁用所有不在你感興趣的表格中的表單元素 - 你需要一個選擇器來選擇所有表單元素不是tbl2的子元素 - 然後序列化表單。被禁用的元素將被省略。

+0

我不認爲禁用表單元素將是任何接近「更好的方式」。 – kapa

1

您可以使用serializeArray方法,它會爲您提供輸入字段的數組,並且可以與數據一起使用。

var params = $("#tbl2 input").serializeArray(); 
+0

請注意,您的選擇器只會匹配''元素,並且不會與其他可能的表單元素匹配,如「