jQuery表格序列化-空字符串


95

我的html:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

当我启动click事件时,formData为空。我正在使用jQuery 1.4.2。

Answers:


214

您必须给input元素命名。例如:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

会在警报框中给您foo=2

.serialize()接受表单字段的名称和值,并创建一个类似的字符串name1=value1&name2=value2。没有名称,就无法创建这样的字符串。

请注意,这name与有所不同id。如果您以“常规”方式使用表格,则该表格也将无法使用。每个表单字段都需要一个名称。


1
表格序列化btw是否需要ID?
维克

让我建议在这里也包括Madbreaks的答案。
斯拉夫语

我有一个名称,但是序列化视图集时我仍然有一个空字符串,因此名称例如是[0] .Unit,[0] .Currency
Marc Roussel

以下答案对我有所帮助...确保您的输入未禁用!
soundstripe

83

尽管不适用于此特定示例,但是如果一个或多个表单输入为,则会发生相同的行为disabled。这些输入将不会显示在序列化字符串中。在我的情况下,所有表单输入都有值,但是被禁用,导致返回空字符串。


4
真讨厌 想要在我发送ajax样式的邮件时禁用字段,并序列化表格之前完成了此操作……
Daniel Lang

1
哦,天哪,这是一个使我发疯的问题。+1人,有什么办法可以使它在残障人士的身体上工作?
Noitidart

@Noitidart您可以编写自己的serializejQuery扩展,以对输入进行迭代并包括禁用的扩展。但是据我所知,没有办法使用开箱即用的jQuery。
Madbreaks 2014年

不包括禁用元素是有意义的,因为禁用元素不应包含用户输入。
珍妮·奥雷利

2
@ JennyO'Reilly当然,但不包含用户输入并不表示“没有值”。
Madbreaks

10

name输入中没有属性...这可能是序列化的问题。

<input id="input1" type="text" value="2" name="input1" />

男子。你真是个救星!谢谢。
Anjana Silva

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.