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.