jQuery: crea un elemento de formulario oculto sobre la marcha


Respuestas:


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

Para responder a su segunda pregunta:

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

56
Tenga en cuenta que IE se ahogará si intenta cambiar el tipo de entrada después de que se haya creado. Úselo $('<input type="hidden">').foo(...)como una solución alternativa.
Roy Tinker

44
Además, la documentación de jQuery sugiere que, dado que la manipulación del DOM es costosa, si tiene que agregar varias entradas, agréguelas todas una vez usando algo como $ (this) .append (hidden_element_array.join (''));
Kedar Mhaswade

1
Acabo de probar este método con jQuery 1.6.2 y recibí este error con Firefox 7.0.1: "excepción no capturada: la propiedad de tipo no se puede cambiar" Parece que no puede usar el método attr para cambiar la propiedad de tipo en estas condiciones. Ahora estoy probando el siguiente método ...
Mikepote

¿ .propFuncionará este mismo enfoque con la función más nueva en la versión API más reciente?
SpaceBison

3
@SpaceBison .propno es "lo nuevo .attr" como mucha gente parece pensar. Aún debe usar .attrpara establecer atributos.
David Hellsing

138
$('#myformelement').append('<input type="hidden" name="myfieldname" value="myvalue" />');

1
¿Alguien probó esta respuesta en IE antiguo?
Arthur Halma el

11
Personalmente, creo que este es un enfoque mucho mejor que la respuesta aceptada, ya que implica menos manipulación DOM / llamadas a funciones.
PaulSkinner

3
@PaulSkinner Para el caso dado, sí, tienes razón, pero no siempre es así. Echa un vistazo aquí stackoverflow.com/a/2690367/1067465
Fernando Silva el

34

Lo mismo que el de David, pero sin attr ()

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

3
¿Hay un nombre para esta forma de poblar una etiqueta?
DLF85

¿Cómo agregar la entrada solo 1 vez? si existe, sigue ingresando un nuevo valor con el mismo atributo
Snow Bases

Muy aerodinámico, me encanta.
Jacques

27

si desea agregar más atributos simplemente haga lo siguiente:

$('<input>').attr('type','hidden').attr('name','foo[]').attr('value','bar').appendTo('form');

O

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

Esto está dando error de consola Unexpected identifier.
Prafulla Kumar Sahu

Segundo código, parece que la necesidad de "id" que se genera dinámicamente algo así como foo1, etc foo2
Web_Developer

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

2
¿Cuál es el 'name-as-seen-at-the-server'?
SaAtomic

1

JSFIDDLE de trabajo

Si tu forma es como

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

Puede agregar entradas ocultas y área de texto para formar así

$(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.');
    });

});

Verifique jsfiddle de trabajo aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.