Просто, чтобы повторить проблему: в IE программная установка атрибута name
для элемента, созданного с помощью document.createElement('input')
, не отражается в getElementsByName
, form.elements
(при добавлении в форму) и является не отправляется с form
(опять же, при добавлении в форму) [ Ссылка ].
Вот обходной путь, который я использовал в прошлом (адаптированный к вашему вопросу отсюда ):
function mk_input( name, val ) {
var inp;
try {
inp = document.createElement('<input type="hidden" name="' + name + '" />');
} catch(e) {
inp = document.createElement("input");
inp.type = "hidden";
inp.name = name;
}
inp.value = val;
return inp
}
Это похоже на обнаружение функций (в отличие от обнаружения в браузере). Первый createElement
будет успешным в IE, а второй - в браузерах, соответствующих стандартам.
И, конечно же, эквивалент jQuery, поскольку вы пометили вопрос так:
function mk_input( name, val ) {
return $('<input type="hidden" name="' + name + '" />')
.val(val)
.get(0)
}
(в качестве sidenote, под капотом jQuery делает то, что вы описываете в своем вопросе: он создает пустышку <div>
и устанавливает для innerHTML
строку <input type="...
, переданную выше).
Как указывает @jeffamaphone, эта ошибка была исправлена в IE8.