javascript - 如何获取一个对象,其中每个元素作为键传递到帖子表单?

标签 javascript forms

我遇到一种情况,我需要使用 JavaScript 动态创建表单,以支持某些旧版浏览器。我需要通过表单发送的数据当前位于一个对象中,因此,例如:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

// Append data to the form somehow.

myForm.submit();

我觉得这应该是一件简单的事情,但我一定错过了一些明显的事情。我想要的是将数据作为每个数据属性的键传递,例如上面的示例中的“name=John%20Doe&age=35”。我想这样做而不必执行以下操作:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

// NOT what I would like:
var formField1 = document.createElement("input");
formField1.setAttribute("type", "hidden");
formField1.setAttribute("name", "name");
formField1.setAttribute("value", data.name);
myForm.appendChild(formField1);

var formField2 = document.createElement("input");
formField2.setAttribute("type", "hidden");
formField2.setAttribute("name", "age");
formField2.setAttribute("value", data.age);
myForm.appendChild(formField2);

myForm.submit();

那么,有没有什么方法可以以这种方式附加我的数据,而无需循环遍历数据的属性以将每个属性添加为隐藏字段?

另外,请注意我的数据属性本身可能是对象或数组。

更新

这是我当前的解决方案,但我一直在寻找一种更直接的方法来传递数据,而不必迭代数据对象,但从这里的所有答案来看,似乎没有其他方法:

var data = { name: 'John Doe', age: 35 };
var myForm = document.createElement("form");
myForm.setAttribute("action", myPostActionPath);
myForm.setAttribute("method", "post");

$.each(data, function(name, value) {
    var formInput = document.createElement("input");
    formInput.setAttribute("type", "hidden");
    formInput.setAttribute("name", name);
    formInput.setAttribute("value", value);
    myForm.appendChild(formInput);
});

myForm.submit();

为了更好地解释一下,我在将一些数据发送回 Controller 后使用此操作来下载文件,而 IE8 和 IE9 不允许通过 AJAX 帖子下载文件,所以这是一个失败-back 允许我下载文件,而无需提交原始表单,否则会导致不良的全页刷新。

最佳答案

So, is there any way to append my data that way without looping through data's properties to add each one as a hidden field?

不幸的是没有:HTMLFormElement API .

关于javascript - 如何获取一个对象,其中每个元素作为键传递到帖子表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320331/

相关文章:

ruby-on-rails-3 - Rails3 : Nested form doesn't save because id

forms - HTML 表单不发送参数

java - 如何在 GWT 表单面板中发布整个页面

html - 具有透明度的下拉菜单使用 RGBA 显示为黑色

javascript - 在 jQuery 中动态创建表

javascript - 使用 Sendgrid/Nodemailer 将 Angular 表单数据发布到 Node.js

javascript - 构建拖放导航选项卡

javascript - CSS对比过滤器

javascript - Redux 字段中输入的第一个字母大写

php - 将 jQuery 表单序列化数据发布到 php