JavaScript添加的HTML表单不提交

时间:2014-04-16 08:34:42

标签: javascript jquery html forms mako

我想使用javascript添加包含输入文本的表单 添加工作正常,但如果我点击提交按钮没有任何反应 这是代码:

if (document.getElementById("run_name_query_box") == null) {
    var run_name_search = '<fieldset id="run_name_query_box">' +
        '<table> <td><tr>' +
        '<p style="font-size:16px"> Runname:</p>' +
        '<input type="text" style="font-size:16px" id="run_name">' +
        '<form method="post" action=query name="query_runname_name">' +
        '<input  style="font-size:14px"  value="Search Database" onclick= "run_name_querycreator()" id="search_run_name_id" type="submit" name="search_run_name_name"> ' +
        '</form>' +
        '</tr></td></table>' +
        '</fieldset>';
    $("#query_type_box").append(run_name_search);
}

run_name_querycreator()函数设置输入的值。

我已经在其他地方使用了几乎相同的东西并且在那里工作:

'<form method="post" action=query name="query">' +                                   
'<input style="font-size:14px" value = "Search Database" onclick = "combine_query()"  id="search" type="submit" name="search" >' +
'</form>'

如果我将普通的html部分复制到主html体中,它也可以。 这是金字塔界面中使用的mako文件的所有部分。

2 个答案:

答案 0 :(得分:4)

我认为您的HTML格式不正确。我不认为表单元素可以是表元素的子元素。

您的代码应该是这样的,

var run_name_search = '<fieldset id="run_name_query_box">' +
    '<form method="post" action=query name="query_runname_name">' +
    '<table>'+
    '<tr><td>' +
    '<p style="font-size:16px"> Runname:</p>' +
    '<input type="text" style="font-size:16px" id="run_name">' +
    '<input  style="font-size:14px"  value="Search Database" onclick= "run_name_querycreator()" id="search_run_name_id" type="submit" name="search_run_name_name"> ';
$("#query_type_box").append(run_name_search);

这是您的代码生成HTML,

<fieldset id="run_name_query_box">
    <p style="font-size:16px">Runname:</p>
    <input style="font-size:16px" id="run_name" type="text">
    <input style="font-size:14px" value="Search Database" onclick="run_name_querycreator()" id="search_run_name_id" name="search_run_name_name" type="submit">
    <table>
        <tbody>
            <tr>
                <td></td>
            </tr>
            <tr>
                <form method="post" action="query" name="query_runname_name"></form>
            </tr>
        </tbody>
    </table>
</fieldset>

<form>中没有表单元素。 (包括您的表单submit按钮)。然后它将如何运作?

您的代码应生成这样的HTML才能生效

<fieldset id="run_name_query_box">
    <form method="post" action="query" name="query_runname_name">
        <table>
            <tbody>
                <tr>
                    <td>
                        <p style="font-size:16px">Runname:</p>
                        <input style="font-size:16px" id="run_name" type="text">
                        <input style="font-size:14px" value="Search Database" onclick="run_name_querycreator()" id="search_run_name_id" name="search_run_name_name" type="submit">
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
</fieldset>

请参阅 FIDDLE

在这个小提琴中您可以看到由您生成的 BEFORE FIX 部分动态元素。 在 AFTER FIX 部分,您可以看到正确的html格式。

仅供参考,当您使用Dynamic html时,请检查您是否在开发人员工具中动态创建了html。

答案 1 :(得分:0)

工作示例: http://jsfiddle.net/awesome/6hh8r/

说明:在全局命名空间中添加了缺少的onclick函数run_name_querycreator(),并使用明显的表单数据将其连接到.post()

window.run_name_querycreator = function () {
    //alert($('#run_name').val());
    var x = '{"run_name":"' + $('#run_name') + '"}'

    $.ajax({
        type: "POST",
        url: $form.attr('action'),
        data: x,
        success: alert('success'),
        dataType: 'json'
    });
}

$(function () {
    if (document.getElementById("run_name_query_box") === null) {
        var run_name_search = '<fieldset id="run_name_query_box">' +
            '<table> <td><tr>' +
            '<p style="font-size:16px"> Runname:</p>' +
            '<input type="text" style="font-size:16px" id="run_name">' +
            '<form method="post" action=query name="query_runname_name">' +
            '<input  style="font-size:14px" value="Search Database" onclick="run_name_querycreator()" id="search_run_name_id" type="submit" name="search_run_name_name"> ' +
            '</form>' +
            '</tr></td></table>' +
            '</fieldset>';
        $("#query_type_box").append(run_name_search);
        $form = $('[name="query_runname_name"]');
        $form.submit(function (e) {
            e.preventDefault();
        });
    }
});