jQuery - Crea un elemento modulo nascosto al volo


Risposte:


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

Per rispondere alla tua seconda domanda:

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

56
Si noti che IE si bloccherà se si tenta di modificare il tipo di input dopo la sua creazione. Utilizzare $('<input type="hidden">').foo(...)come soluzione alternativa.
Roy Tinker,

4
Inoltre, la documentazione di jQuery suggerisce che, poiché la manipolazione del DOM è costosa, se hai più input da aggiungere, aggiungili tutti una volta usando qualcosa come $ (this) .append (hidden_element_array.join (''));
Kedar Mhaswade,

1
Ho appena provato questo metodo con jQuery 1.6.2 e ho ricevuto questo errore con Firefox 7.0.1: "eccezione non rilevata: la proprietà type non può essere modificata" Sembra che non sia possibile utilizzare il metodo attr per modificare la proprietà type in queste condizioni. Ora sto provando il metodo seguente ...
Mikepote,

Questo stesso approccio funzionerà con la .propfunzione più recente nella versione API più recente?
SpaceBison,

3
@SpaceBison .propnon è "il nuovo .attr" come molte persone sembrano pensare. Dovresti comunque usare .attrper impostare gli attributi.
David Hellsing,

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

1
Qualcuno ha testato questa risposta sul vecchio IE?
Arthur Halma,

11
Personalmente, credo che questo sia un approccio molto migliore rispetto alla risposta accettata in quanto comporta meno chiamate di manipolazione / funzione DOM.
Paulkinkin

3
@PaulSkinner Per il caso dato, sì, hai ragione, ma non è sempre così. Dai un'occhiata qui stackoverflow.com/a/2690367/1067465
Fernando Silva,

34

Lo stesso di David, ma senza attr ()

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

3
Esiste un nome per questo modo di popolare un tag?
DLF85

come aggiungere l'input solo 1 volta? se esiste, continua a inserire un nuovo valore con lo stesso attributo
Snow Bases,

Molto aerodinamico, lo adoro.
Jacques

27

se vuoi aggiungere più attributi fai come:

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

questo sta dando errore console Unexpected identifier.
Prafulla Kumar Sahu,

Secondo codice, sembra che "id" debba essere generato in modo dinamico qualcosa come foo1, foo2 ecc.
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
Qual è il 'name-as-seen-at-the-server'?
SaAtomic,

1

JSFIDDLE funzionante

Se il tuo modulo è simile

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

È possibile aggiungere input e textarea nascosti in questo modo

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

});

Controlla il jsfiddle di lavoro qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.