2011-09-28 34 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

请注意,您的选择器只会匹配''元素,并且不会与其他可能的表单元素匹配,如“