admin管理员组文章数量:1134232
Is there a way in jQuery to create and submit a form on the fly?
Something like below:
<html>
<head>
<title>Title Text Goes Here</title>
<script src=".7.js"></script>
<script>
$(document).ready(function(){alert('hi')});
$('<form/>').attr('action','form2.html').submit();
</script>
</head>
<body>
Content Area
</body>
</html>
Is this supposed to work or there is a different way to do this?
Is there a way in jQuery to create and submit a form on the fly?
Something like below:
<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>
Is this supposed to work or there is a different way to do this?
Share Improve this question edited Mar 2, 2022 at 15:52 Max Base 6411 gold badge7 silver badges15 bronze badges asked Nov 3, 2011 at 23:10 Santosh GokakSantosh Gokak 3,4113 gold badges24 silver badges24 bronze badges 2- Have you read the API? – geoffreak Commented Nov 3, 2011 at 23:19
- Also take a look at the accepted answer here: stackoverflow.com/questions/14836557/… – thdoan Commented Oct 12, 2016 at 4:26
12 Answers
Reset to default 120There were two things wrong with your code. The first one is that you included the $(document).ready();
but didn't wrap the jQuery object that's creating the element with it.
The second was the method you were using. jQuery will create any element when the selector (or where you would usually put the selector) is replaced with the element you wish to create. Then you just append it to the body and submit it.
$(document).ready(function(){
$('<form action="form2.html"></form>').appendTo('body').submit();
});
Here's the code in action. In this example, it doesn't auto submit, just to prove that it would add the form element.
Here's the code with auto submit. It works out fine. Jsfiddle takes you to a 404 page because "form2.html" doesn't exist on its server, obviously.
Yes, it is possible. One of the solutions is below (jsfiddle as a proof).
HTML:
<a id="fire" href="#" title="submit form">Submit form</a>
(see, above there is no form)
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();
});
The above example shows you how to create form, how to add inputs and how to submit. Sometimes display of the result is forbidden by X-Frame-Options
, so I have set target
to _top
, which replaces the main window's content. Alternatively if you set _blank
, it can show within new window / tab.
Its My version without jQuery, simple function can be used on fly
Function:
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();
}
Usage:
post_to_url('fullurlpath', {
field1:'value1',
field2:'value2'
}, 'post');
Like Purmou, but removing the form when submit will done.
$(function() {
$('<form action="form2.html"></form>').appendTo('body').submit().remove();
});
Josepmra example works well for what i need.
But i had to add the line form.appendTo(document.body)
for it to work.
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();
Yes, you just forgot the quotes ...
$('<form/>').attr('action','form2.html').submit();
Try with this code, It is a totally dynamic solution:
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();
Why don't you $.post
or $.get
directly?
GET
requests:
$.get(url, data, callback);
POST
requests:
$.post(url, data, callback);
Then you don't need a form, just send the data in your data object.
$.post("form2.html", {myField: "some value"}, function(){
alert("done!");
});
Using 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();
Steps to take:
- First you need to create the form element.
- With the form you have to pass the URL to which you wants to navigate.
- Specify the
method
type for the form. - Add the form body.
- Finally call the
submit()
method on the form.
Code:
var Form = document.createElement("form");
Form.action = '/DashboardModule/DevicesInfo/RedirectToView?TerminalId='+marker.data;
Form.method = "post";
var formToSubmit = document.body.appendChild(Form);
formToSubmit.submit();
Assuming you want create a form with some parameters and make a POST call
var param1 = 10;
$('<form action="./your_target.html" method="POST">' +
'<input type="hidden" name="param" value="' + param + '" />' +
'</form>').appendTo('body').submit();
You could also do it all on one line if you so wish :-)
You can use this function in form on submit.
But this is in javascript, I would like change this to jquery.
I searched online but none retains the DOM, so it can be removed after submit.
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
}
本文标签: javascriptDynamically create and submit formStack Overflow
版权声明:本文标题:javascript - Dynamically create and submit form - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736778476a1952468.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论