What is the simplest way to dynamically create a hidden input form field using jQuery?
Asked
Active
Viewed 3.9e+01k times
6 Answers
682
$('<input>').attr('type','hidden').appendTo('form');
To answer your second question:
$('<input>').attr({
type: 'hidden',
id: 'foo',
name: 'bar'
}).appendTo('form');

David Hellsing
- 106,495
- 44
- 176
- 212
-
57Note that IE will choke if you attempt to change the input type after it's created. Use `$('').foo(...)` as a workaround. – Roy Tinker Oct 06 '11 at 04:18
-
4Also, jQuery documentation suggests that since DOM manipulation is expensive, if you have multiple inputs to be added, add all of them once using something like $(this).append(hidden_element_array.join('')); – Kedar Mhaswade Nov 02 '11 at 20:29
-
1I just tried this method with jQuery 1.6.2 and recieved this error with Firefox 7.0.1: "uncaught exception: type property can't be changed" It seems that you cant use the attr method to change the type property under these conditions. I'm now trying the method below... – Mikepote Nov 11 '11 at 07:17
-
Will this same approach work with the newer `.prop` function in the newer API release? – SpaceBison Aug 31 '12 at 09:18
-
3@SpaceBison `.prop` is not "the new `.attr`" as a lot of people seems to think. You should still use `.attr` to set attributes. – David Hellsing Mar 25 '13 at 13:33
-
1I had trouble with this approach when I tried to add valid HTML for the input field, as I was unable to add either a or type of field. If anyone knows a solution, that would be very helpful – readikus Apr 18 '13 at 11:43
154
$('#myformelement').append('<input type="hidden" name="myfieldname" value="myvalue" />');

Mark Bell
- 28,985
- 26
- 118
- 145
-
1
-
13Personally, I believe this is a much better approach than the accepted answer as it involves less DOM manipulation/function calls. – PaulSkinner Aug 05 '13 at 09:38
-
3@PaulSkinner For the given case, yes you are correct, but it isn't always so. Take a look here http://stackoverflow.com/a/2690367/1067465 – Fernando Silva Aug 06 '14 at 18:08
44
The same as David's, but without attr()
$('<input>', {
type: 'hidden',
id: 'foo',
name: 'foo',
value: 'bar'
}).appendTo('form');

Sergey Onishchenko
- 6,943
- 4
- 44
- 51
-
3
-
how to append the input only 1 time? if its exist it keep entering new value with same attribute – Snowbases Jun 28 '18 at 08:10
-
29
if you want to add more attributes just do like:
$('<input>').attr('type','hidden').attr('name','foo[]').attr('value','bar').appendTo('form');
Or
$('<input>').attr({
type: 'hidden',
id: 'foo',
name: 'foo[]',
value: 'bar'
}).appendTo('form');

Slipstream
- 13,455
- 3
- 59
- 45
-
-
Second code, seems the "id" need to be generated dynamically something like foo1, foo2 etc – Web_Developer Oct 01 '18 at 08:00
8
function addHidden(theForm, key, value) {
// Create a hidden input element, and append it to the form:
var input = document.createElement('input');
input.type = 'hidden';
input.name = key; //name-as-seen-at-the-server
input.value = value;
theForm.appendChild(input);
}
// Form reference:
var theForm = document.forms['detParameterForm'];
// Add data:
addHidden(theForm, 'key-one', 'value');

Saurabh Chandra Patel
- 12,712
- 6
- 88
- 78
2
Working JSFIDDLE
If your form is like
<form action="" method="get" id="hidden-element-test">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="Submit">
</form>
<br><br>
<button id="add-input">Add hidden input</button>
<button id="add-textarea">Add hidden textarea</button>
You can add hidden input and textarea to form like this
$(document).ready(function(){
$("#add-input").on('click', function(){
$('#hidden-element-test').prepend('<input type="hidden" name="ipaddress" value="192.168.1.201" />');
alert('Hideen Input Added.');
});
$("#add-textarea").on('click', function(){
$('#hidden-element-test').prepend('<textarea name="instructions" style="display:none;">this is a test textarea</textarea>');
alert('Hideen Textarea Added.');
});
});
Check working jsfiddle here

Subodh Ghulaxe
- 18,333
- 14
- 83
- 102