jQuery - создает скрытый элемент формы на лету

333

Какой самый простой способ динамически создать скрытое поле ввода формы с помощью jQuery?

Митхун Шридхаран
источник

Ответы:

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

Чтобы ответить на ваш второй вопрос:

$('<input>').attr({
    type: 'hidden',
    id: 'foo',
    name: 'bar'
}).appendTo('form');
Дэвид Хеллсинг
источник
56
Обратите внимание, что IE захлебнется, если вы попытаетесь изменить тип ввода после его создания. Используйте $('<input type="hidden">').foo(...)в качестве обходного пути.
Рой Тинкер
4
Кроме того, документация jQuery предполагает, что, поскольку манипулирование DOM является дорогостоящим, если вам нужно добавить несколько входов, добавьте их все один раз, используя что-то вроде $ (this) .append (hidden_element_array.join (''));
Кедар Мхасвад
1
Я только что попробовал этот метод с jQuery 1.6.2 и получил эту ошибку с Firefox 7.0.1: «необработанное исключение: свойство типа не может быть изменено». Кажется, вы не можете использовать метод attr для изменения свойства типа в этих условиях. Я сейчас пытаюсь метод ниже:
Mikepote
Будет ли этот же подход работать с более новой .propфункцией в новой версии API?
SpaceBison
3
@SpaceBison .propне «новый .attr», как многие думают. Вы все еще должны использовать .attrдля установки атрибутов.
Дэвид Хеллсинг
138
$('#myformelement').append('<input type="hidden" name="myfieldname" value="myvalue" />');
Марк Белл
источник
1
Кто-нибудь проверял этот ответ на старом IE?
Артур Халма
11
Лично я считаю, что это гораздо лучший подход, чем принятый ответ, так как он включает меньше манипуляций DOM / вызовов функций.
PaulSkinner
3
@PaulSkinner Для данного случая, да, вы правы, но это не всегда так. Взгляните сюда stackoverflow.com/a/2690367/1067465
Фернандо Сильва
34

Так же, как у Давида, но без атрибута ()

$('<input>', {
    type: 'hidden',
    id: 'foo',
    name: 'foo',
    value: 'bar'
}).appendTo('form');
Сергей Онищенко
источник
3
Есть ли название для этого способа заполнения тега?
DLF85
как добавить вход только 1 раз? если он существует, он продолжает вводить новое значение с тем же атрибутом
Snow Bases
Очень обтекаемый, я люблю это.
Жак
27

если вы хотите добавить больше атрибутов, просто сделайте так:

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

Или

$('<input>').attr({
    type: 'hidden',
    id: 'foo',
    name: 'foo[]',
    value: 'bar'
}).appendTo('form');
Slipstream
источник
это дает ошибку консоли Unexpected identifier.
Прафулла Кумар Саху
Второй код, кажется, "id" должен генерироваться динамически, например, foo1, 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
Что это 'name-as-seen-at-the-server'?
SaAtomic
1

Рабочая JSFIDDLE

Если ваша форма похожа

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

Вы можете добавить скрытый ввод и текстовое поле, чтобы сформировать, как это

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

});

Проверьте работу jsfiddle здесь

Subodh Ghulaxe
источник