359

What is the simplest way to dynamically create a hidden input form field using jQuery?

informatik01
  • 16,038
  • 10
  • 74
  • 104
Mithun Sreedharan
  • 49,883
  • 70
  • 181
  • 236

6 Answers6

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
  • 57
    Note 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
  • 4
    Also, 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
  • 1
    I 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
  • 1
    I 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
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
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
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