我正在使用jQuery编写表单并遇到一些困难。
我的表单在静态页面(html)中工作正常 但是,当我在动态页面(aspx)中使用表单时,表单行为不正确。 我无法将项目附加到表单并调用form.serialize函数。
我认为当表单在另一个表单中时会发生错误(.aspx代码需要用表单标记括起来。)
我该怎么办?
让我给出我的代码的简化版本:
<form name="Form1" method="post" id="Form1">
some content
<form name="form_inside">
<input name="fname" type="text" />
</form>
</form>
jQuery代码:
$("#form_inside").append($("<input type='text' name='lname'>"));
当用户提交时,
$("#form_inside").serialize();
// it should return fname=inputfname&lname=inputlname
我想将元素追加到“form_inside”并序列化“form_inside”形式 aspx需要表单“Form1”,我无法将其删除。
答案 0 :(得分:1)
您是否可以序列化Form1
内的字段?
我对ASP一无所知,但似乎你并没有直截了当地提交“提交” - 如果字段不在他们自己的单独形式中,那真的很重要吗?
您可以将您感兴趣的字段组合在<div>
或其他内容中,例如:
<div id="my-interesting-fields">
...
</div>
然后将#form-inside
替换为适当的#my-interesting-fields
- 是否有用?
好的,快速浏览jQuery代码表明serialize()
取决于表单的elements
成员。
我想你可以通过几种不同的方式解决这个问题:
将#my-interesting-fields
中的所有元素复制到您在<form>
之外动态创建的临时Form1
,然后在其上调用serialize()
。类似的东西:
$("#Form1").after("<form id='tmp-form'></form>").
append("#my-interesting-fields input");
$("tmp-form").serialize();
或者,在elements
上创建#my-interesting-fields
成员,例如
$("#my-interesting-fields").elements = $("#my-interesting-fields input");
$("#my-interesting-fields").serialize();
我没有尝试过其中任何一种,但这可能会给你一些想法。不是我一定会推荐其中任何一个:)
答案 1 :(得分:1)
因为你不能嵌套&lt; form&gt;标签你需要关闭标准的dotnet表格标签,如下所示:
<script type="text/javascript">
$(document).ready(function() {
$("#form_inside").append($("<input type='text' name='lname'>"));
$("#submitBtn").click(function() {function() {
var obj = $("#form_inside *");
var values = new Array();
obj.each(function(i,obj1) {
if (obj1.name && !obj1.disabled && obj1.value) {
values.push(obj1);
};
});
alert(jQuery.param(values));
}); });
});
</script>
<form id="form1" runat="server">
<div>
<div id="form_inside" name="form_inside"> <input name="fname" type="text" /><input type="button" id="submitBtn" /></div>
</div>
</form>
表单元素数组上的jQuery.param将为您提供与.serialize()
相同的结果所以你得到div $(“#form_inside *”)中的所有元素然后过滤元素然后在结果jQuery.param将为你提供你所需要的