我的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。
答案 0 :(得分:191)
您必须为input
元素指定名称。 E.g:
<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 :(得分:73)
虽然它不适用于此特定示例,但如果一个或多个表单输入已禁用,则会出现相同的行为。这些输入不会显示在序列化字符串中。在我的例子中,所有表单输入都有值但被禁用,导致返回一个空字符串。
答案 2 :(得分:7)
输入中没有name
属性...这可能是序列化的问题。
<input id="input1" type="text" value="2" name="input1" />
答案 3 :(得分:6)
还要确保页面上没有2个具有相同ID的元素。