动态创建和提交表单
Dynamically create and submit form
是否有一种方法在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>
这应该工作还是有不同的方法来做到这一点?
您的代码有两处错误。第一个是您包含了$(document).ready();
,但没有将创建元素的jQuery对象与它一起包装。
第二个是您正在使用的方法。当选择器(或者您通常放置选择器的地方)被您希望创建的元素替换时,jQuery将创建任何元素。然后你只需要将它附加到正文并提交。
$(document).ready(function(){
$('<form action="form2.html"></form>').appendTo('body').submit();
});
下面是实际的代码。在这个例子中,它没有自动提交,只是为了证明它会添加form元素。
下面是自动提交的代码。结果很好。Jsfiddle会把您带到一个404页面,显然是因为"form2.html"在它的服务器上不存在。是有可能的。其中一个解决方案如下(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
,它可以显示在新窗口/选项卡。
这是我的版本,没有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();
是的,你只是忘了引号…
$('<form/>').attr('action','form2.html').submit();
试试下面的代码,这是一个完全动态的解决方案:
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).submit();
为什么不直接使用$.post
或$.get
呢?
GET
requests:
$.get(url, data, callback);
POST
请求:
$.post(url, data, callback);
那么你就不需要表单了,只需要在你的数据对象中发送数据。
$.post("form2.html", {myField: "some value"}, function(){
alert("done!");
});
使用Jquery
$('<form/>', { action: url, method: 'POST' }).append(
$('<input>', {type: 'hidden', id: 'id_field_1', name: 'name_field_1', value: val_field_1}),
$('<input>', {type: 'hidden', id: 'id_field_2', name: 'name_field_2', value: val_field_2}),
).appendTo('body').submit();
采取的步骤:
- 首先,你需要创建表单元素。
- 在表单中,你必须传递你想要导航的URL。
- 为表单指定
method
类型 - 添加表单主体 最后在表单上调用
submit()
方法。var Form = document.createElement("form");
Form.action = '/DashboardModule/DevicesInfo/RedirectToView?TerminalId='+marker.data;
Form.method = "post";
var formToSubmit = document.body.appendChild(Form);
formToSubmit.submit();
假设您想创建一个带有一些参数的表单并进行POST调用
var param1 = 10;
$('<form action="./your_target.html" method="POST">' +
'<input type="hidden" name="param" value="' + param + '" />' +
'</form>').appendTo('body').submit();
如果您愿意,也可以在一行中完成:-)
你可以在表单中使用这个函数。
但是这是在javascript中,我想把它改成jquery
我在线搜索,但没有保留DOM,所以它可以在提交后删除。
const trimTypes = ['email', 'hidden', 'number', 'password', 'tel', 'text', null, ''];
function submitTrimmedDataForm(event) {
event.preventDefault();
let currentForm = event.target;
var form = document.createElement("form");
form.style.display = "none";
form.method = currentForm.getAttribute('method');
form.action = currentForm.getAttribute('action');
Array.from(currentForm.getElementsByTagName('input')).forEach(el => {
console.log("name :" + el.getAttribute('name') + ", value :" + el.value + ", type :" + el.getAttribute('type'));
var element = document.createElement("input");
let type = el.getAttribute('type');
if (trimTypes.includes(type)) {
element.value = trim(el.value);
}
element.name = el.getAttribute('name');
element.type = el.getAttribute('type');
form.appendChild(element);
});
Array.from(currentForm.getElementsByTagName('select')).forEach(el => {
console.log("select name :" + el.getAttribute('name') + ", value :" + el.value);
var element = document.createElement("input");
element.value = el.value;
element.name = el.getAttribute('name');
element.type = 'text';
form.appendChild(element);
});
document.body.appendChild(form);
form.submit();
document.body.removeChild(form); // this is important as well
}
相关文章:
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 当所有输入文本字段都为空时,禁止表单提交,但当jquery中的任何字段不为空时允许提交
- setTimeOut AFTER jQuery表单提交
- 从函数中选择要触发表单提交的正确元素
- JavaScript表单提交没有't fire asp服务器端点击功能的提交按钮
- 表单提交问题,如何在我的URL末尾获得ID的值
- Javascript使用Confirm取消表单提交