Dynamically create and submit form

JavascriptJqueryFormsSubmit

Javascript Problem Overview


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?

Javascript Solutions


Solution 1 - Javascript

There 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.

Solution 2 - Javascript

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.

Solution 3 - Javascript

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');

Solution 4 - Javascript

Like Purmou, but removing the form when submit will done.

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

Solution 5 - Javascript

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();

Solution 6 - Javascript

Yes, you just forgot the quotes ...

$('<form/>').attr('action','form2.html').submit();

Solution 7 - Javascript

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();

Solution 8 - Javascript

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!");
});

Solution 9 - Javascript

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();

Solution 10 - Javascript

Steps to take:

  1. First you need to create the form element.
  2. With the form you have to pass the URL to which you wants to navigate.
  3. Specify the method type for the form.
  4. Add the form body.
  5. 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();

Solution 11 - Javascript

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 :-)

Solution 12 - Javascript

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
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSantosh GokakView Question on Stackoverflow
Solution 1 - JavascriptPuragView Answer on Stackoverflow
Solution 2 - JavascriptTadeckView Answer on Stackoverflow
Solution 3 - JavascriptMuthukumar AnbalaganView Answer on Stackoverflow
Solution 4 - JavascriptjavrayView Answer on Stackoverflow
Solution 5 - JavascriptwebsView Answer on Stackoverflow
Solution 6 - JavascriptNicolas TheryView Answer on Stackoverflow
Solution 7 - JavascriptjosepmraView Answer on Stackoverflow
Solution 8 - JavascriptSparKView Answer on Stackoverflow
Solution 9 - JavascriptJairusView Answer on Stackoverflow
Solution 10 - Javascriptuser15247449View Answer on Stackoverflow
Solution 11 - JavascriptAnthonyView Answer on Stackoverflow
Solution 12 - JavascriptAditya YadaView Answer on Stackoverflow