jQuery - Erstellen Sie versteckte Formularelemente im laufenden Betrieb


Antworten:


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

So beantworten Sie Ihre zweite Frage:

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

56
Beachten Sie, dass der IE erstickt, wenn Sie versuchen, den Eingabetyp nach seiner Erstellung zu ändern. Verwenden Sie $('<input type="hidden">').foo(...)als Behelfslösung.
Roy Tinker

4
In der jQuery-Dokumentation wird außerdem vorgeschlagen, dass, da die DOM-Manipulation teuer ist, wenn Sie mehrere Eingaben hinzufügen müssen, alle einmal hinzugefügt werden müssen, indem Sie so etwas wie $ (this) .append (hidden_element_array.join ('')) verwenden.
Kedar Mhaswade

1
Ich habe diese Methode gerade mit jQuery 1.6.2 ausprobiert und diesen Fehler mit Firefox 7.0.1 erhalten: "Nicht erfasste Ausnahme: Typeneigenschaft kann nicht geändert werden" Es scheint, dass Sie die attr-Methode nicht verwenden können, um die Typeneigenschaft unter diesen Bedingungen zu ändern. Ich versuche jetzt die Methode unten ...
Mikepote

Funktioniert dieser Ansatz mit der neueren .propFunktion in der neueren API-Version?
SpaceBison

3
@SpaceBison .propist nicht "das Neue .attr", wie viele Leute zu denken scheinen. Sie sollten weiterhin .attrAttribute festlegen.
David Hellsing

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

1
Hat jemand diese Antwort auf dem alten IE getestet?
Arthur Halma

11
Persönlich glaube ich, dass dies ein viel besserer Ansatz ist als die akzeptierte Antwort, da weniger DOM-Manipulationen / Funktionsaufrufe erforderlich sind.
PaulSkinner

3
@PaulSkinner Für den gegebenen Fall sind Sie ja richtig, aber es ist nicht immer so. Werfen
Fernando Silva

34

Das gleiche wie bei David, aber ohne attr ()

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

3
Gibt es einen Namen für diese Art, ein Tag zu füllen?
DLF85

Wie füge ich die Eingabe nur einmal hinzu? Wenn es existiert, gibt es immer wieder einen neuen Wert mit demselben Attribut ein
Snow Bases

Sehr stromlinienförmig, ich liebe es.
Jacques

27

Wenn Sie weitere Attribute hinzufügen möchten, gehen Sie wie folgt vor:

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

Oder

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

Dies führt zu einem Konsolenfehler Unexpected identifier.
Prafulla Kumar Sahu

Zweiter Code, scheint, dass die "ID" dynamisch generiert werden muss, etwa foo1, foo2 usw.
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
Was ist das 'name-as-seen-at-the-server'?
SaAtomic

1

Arbeits JSFIDDLE

Wenn Ihr Formular wie ist

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

Sie können versteckte Eingaben und Textbereiche hinzufügen, um diese Form zu erhalten

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

});

Überprüfen Sie hier die funktionierende jsfiddle

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.