363

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

6 Answers 6

684
$('<input>').attr('type','hidden').appendTo('form');

To answer your second question:

$('<input>').attr({
    type: 'hidden',
    id: 'foo',
    name: 'bar'
}).appendTo('form');
Sign up to request clarification or add additional context in comments.

6 Comments

Note that IE will choke if you attempt to change the input type after it's created. Use $('<input type="hidden">').foo(...) as a workaround.
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(''));
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...
@SpaceBison .prop is not "the new .attr" as a lot of people seems to think. You should still use .attr to set attributes.
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 </input> or <input /> type of field. If anyone knows a solution, that would be very helpful
|
155
$('#myformelement').append('<input type="hidden" name="myfieldname" value="myvalue" />');

3 Comments

Did someone test this answer on old IE?
Personally, I believe this is a much better approach than the accepted answer as it involves less DOM manipulation/function calls.
@PaulSkinner For the given case, yes you are correct, but it isn't always so. Take a look here stackoverflow.com/a/2690367/1067465
48

The same as David's, but without attr()

$('<input>', {
    type: 'hidden',
    id: 'foo',
    name: 'foo',
    value: 'bar'
}).appendTo('form');

3 Comments

Is there a name for this way of populating a tag?
how to append the input only 1 time? if its exist it keep entering new value with same attribute
Very streamlined, I love it.
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');

2 Comments

this is giving console error Unexpected identifier .
Second code, seems the "id" need to be generated dynamically something like foo1, foo2 etc
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');

1 Comment

What is the 'name-as-seen-at-the-server'?
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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.