动态创建和提交表单

IT技术 javascript jquery forms submit
2021-01-21 16:33:25

jQuery 中有没有一种方法可以即时创建和提交表单。

像下面这样的东西。

<html>
    <head>
    <title> Title Text Goes Here </title>
    <script src="http://code.jquery.com/jquery-1.7.js"></script>
    <script>
        $(document).ready(function(){alert('hi')});
        $('<form/>').attr('action','form2.html').submit();
    </script>
    </head>
    <body>

        Content Area

    </body>
    </html>

这应该有效还是有不同的方法来做到这一点?

6个回答

您的代码有两处错误。第一个是您包含$(document).ready();但没有包装使用它创建元素的 jQuery 对象。

第二个是你使用的方法。jQuery将在替换您要创建的元素时替换选择器(或通常将选择器)替换为您要创建的元素时创建任何元素。然后您只需将其附加到正文并提交即可。

$(document).ready(function(){
    $('<form action="form2.html"></form>').appendTo('body').submit();
});

这是运行中的代码。在这个例子中,它不自动提交,只是为了证明它会添加表单元素。

这是自动提交的代码。效果很好。Jsfiddle 将您带到 404 页面,因为显然其服务器上不存在“form2.html”。

你提到的第一个问题虽然不是问题:)
2021-04-07 16:33:25
@user42540:不一定,但最好在页面加载完成后触发您的 JS 代码。这将防止不必要的错误。
2021-04-09 16:33:25
它可能适用于某些浏览器,但有一个很好的理由将大多数 DOM 操作代码包含在一个$(document).ready()块中 - 它确保浏览器能够安全地对 DOM 进行任何更改。否则,如果您在整个页面加载之前尝试更改任何内容,诸如 IE6/7 之类的挑剔浏览器就会吐槽。
2021-04-14 16:33:25

对的,这是可能的。解决方案之一如下(jsfiddle 作为证明)。

HTML:

<a id="fire" href="#" title="submit form">Submit form</a>

(看,上面没有表格)

JavaScript:

jQuery('#fire').click(function(event){
    event.preventDefault();
    var newForm = jQuery('<form>', {
        'action': 'http://www.google.com/search',
        'target': '_top'
    }).append(jQuery('<input>', {
        'name': 'q',
        'value': 'stack overflow',
        'type': 'hidden'
    }));
    newForm.submit();
});

上面的示例向您展示了如何创建表单、如何添加输入以及如何提交。有时显示结果被 禁止X-Frame-Options,所以我设置target_top,它替换了主窗口的内容。或者,如果您设置_blank,它可以显示在新窗口/选项卡中。

很好的解决方案(虽然有点长),但输入没有出现。
2021-03-25 16:33:25
.appendTo('body') 需要它在我的 Firefox (23.0.1) 中工作。否则它只返回一个表单对象但不提交。
2021-03-30 16:33:25
这就是 GET,类似于将查询字符串附加到目标 URI。假设许多人想要使用表单来发布。如果不明显,请使用它'method': post来完成。
2021-03-30 16:33:25
newForm.hide().appendTo("body").submit(); // 不显示字段并在 FF 中工作
2021-04-03 16:33:25
@Purmou:实际的解决方案是创建表单然后submit()调用。我特意提供了很长的表单创建代码来展示如何创建表单及其元素。我相信这很好。
2021-04-12 16:33:25

它的我的版本没有jQuery,简单的功能可以即时使用

功能:

function post_to_url(path, params, method) {
    method = method || "post";

    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

用法:

post_to_url('fullurlpath', {
    field1:'value1',
    field2:'value2'
}, 'post');

像 Purmou 一样,但在提交时删除表单将完成。

$(function() {
   $('<form action="form2.html"></form>').appendTo('body').submit().remove();
});

Josepmra 示例非常适合我的需要。但我不得不添加行

 form.appendTo( document.body )

让它工作。

var form = $(document.createElement('form'));
$(form).attr("action", "reserves.php");
$(form).attr("method", "POST");

var input = $("<input>")
    .attr("type", "hidden")
    .attr("name", "mydata")
    .val("bla" );


$(form).append($(input));

form.appendTo( document.body )

$(form).submit();