处理表单的jQuery在另一个表单中时发生错误

时间:2009-07-02 03:45:16

标签: asp.net javascript jquery forms

我正在使用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”,我无法将其删除。

2 个答案:

答案 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将为你提供你所需要的