jquery .serialize不会处理动态生成的表单

时间:2015-04-08 19:42:35

标签: jquery html jsp

我在.jsp中使用Java / Spring。

我在myPage.jsp中的div内部myForm.jsp动态加载表单(表单标签包含),并尝试使用所述数据进行ajax post调用。当我调用jQuery .serialize并打印出数据时,它会变回空白。

但是,如果在myPage.jsp中包含表单标记并只加载输入,那么一切正常。

是否存在动态加载整个表单的问题?

myPage.jsp



<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
    if(window.attachEvent)
    {
        window.attachEvent('onload', LoadTable);
    } else
    {
        if(window.onload)
        {
            var curronload = window.onload;
            var newonload = function()
            {
                curronload();
                LoadTable();
            };
            window.onload = newonload;
        } else
        {
            window.onload = LoadTable;
        }
    }

    $(document).on('click','#myFormSubmit',function()
    {
        var data = $('#myForm').serialize();
        console.log("data " + data);
        //data is empty!

        return false;
    });

    function LoadTable()
    {
        $.get('/url', function(data) {
            $('#myForm').append(data);
            console.log('Data was fetched.');
        });
    }
</script>
&#13;
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<body>
<div id='myDiv'>
    <!-- myForm.jsp gets loaded here -->
</div>

</body>
</html>
&#13;
&#13;
&#13;

myForm.jsp

<form id='myForm' name='config_cache' action='config_cache' method='POST'>
  <input id='input1' type="checkbox" name="input1" value="true">
  <input id='myFormSubmit' name="submit" type="submit" value="Submit">
</form>

3 个答案:

答案 0 :(得分:0)

您的表单正在提交 - 您尚未向其提交任何数据。您表单的唯一输入是未选中的复选框。根据{{​​3}}

的文档
  

注意:只有&#34;成功控制&#34;被序列化为字符串。没有提交按钮值被序列化,因为表单未使用按钮提交。要使表单元素的值包含在序列化字符串中,该元素必须具有name属性。 复选框和单选按钮(类型为#34;输入&#34;或&#34;复选框&#34;)的值仅在选中时才包含。来自文件选择元素的数据不是序列

用这个替换你的表格并提交。你应该看到:
data someName =这个+是+ a + test&amp; input1 = true

<form id='myForm' name='config_cache' action='config_cache' method='POST'>                                                                                    
    <input type="hidden" name="someName" value="This is a test">                                                                                              
    <input id='input1' type="checkbox" name="input1" value="true" checked>                                                                                    
    <input id='myFormSubmit' name="submit" type="submit" value="Submit">                                                                                      
</form>                                                                                                                                                       

答案 1 :(得分:0)

听起来你需要在一个表格中序列化你的复选框,如果没有选中,它将以空值提交。这是javascript表单序列化的常见要求。看看这个处理该要求的jquery插件:

https://github.com/davemaple/jquery-form2json

这样可以将表单序列化为: { "input1": null }

答案 2 :(得分:0)

对于动态数据,请使用.appendTo()[https://api.jquery.com/appendTo/]而不是.append()!

我知道它的发音,但是可以正常工作!