【问题标题】:serialize from a table element and not the whole form从表元素而不是整个表单序列化
【发布时间】:2011-11-26 18:50:03
【问题描述】:

尝试仅序列化特定表中的元素,但如果我执行整个操作,它只会返回结果Form

在下面的代码中,我只想 ajax 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
});

【问题讨论】:

    标签: jquery serialization


    【解决方案1】:

    您可以使用 serializeArray 方法,该方法将为您提供输入字段的数组并可以与数据一起使用。

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

    【讨论】:

    • 请注意,您的选择器只会匹配&lt;input&gt; 元素,而不会匹配其他可能的表单元素,例如&lt;select&gt;&lt;textarea&gt;
    • 是的,它仅用于示例 html 中的输入,如果您需要其他表单元素,则需要包含它们。
    【解决方案2】:

    你不能serialize 一个表——该方法不适用于那种 DOM 对象,只有表单和表单字段可以被序列化。

    如果你真的想做你提议的事情,你需要适当的选择器来选择tbl2 的子元素,它们也是表单元素,然后你必须手动序列化每个元素。有人在另一个问题中做到了,这里:serialize without a form?

    更好的方法可能是禁用所有不在您感兴趣的表格中的表单元素——您需要一个选择器来选择所有不是tbl2 子元素的表单元素——并且然后序列化表格。禁用的元素将被省略。

    【讨论】:

    • 我不认为禁用表单元素会接近a better way
    【解决方案3】:

    首先,&lt;table&gt; 不能具有 name 属性,即使可以,jQuery ID selector (#) 也不会匹配它。

    如果您改用id (&lt;table id="tbl2"&gt;),它将像这样工作:

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

    :input 选择器选择所有表单元素(此处为 #tbl2 内部),这是必需的,因为 serialize() 仅适用于这些元素。

    也请查看我的jsFiddle Demo

    【讨论】:

    • @Deeptechtons 您可以在我发布的 Fiddle 中随意尝试,但我向您保证它不会起作用。
    • 我的代码中实际上有 id,当我在这个问题中编写代码时,我一定是错误地输入了名称。对不起。
    • @Christian 那你就不用改name了,直接用serialize()就行了。
    • @bazmegakapa 这篇文章也可能有助于操作人员仅获取值为 stackoverflow.com/questions/608730/… 的输入
    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2021-11-19
    • 1970-01-01
    • 2019-04-18
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多