Могу ли я использовать JavaScript для установки атрибута name? - PullRequest
9 голосов
/ 01 сентября 2009

Согласно SitePoint (и моим собственным экспериментам), реализация IE setAttribute () ошибочна и ненадежна.

Также согласно SitePoint атрибут name доступен только для чтения.

Есть ли другой способ установить атрибуты name для элементов? Мне это нужно для использования с переключателями. Если возможно, я бы хотел решение без jQuery, так как в настоящее время я не использую библиотеку.

Заранее спасибо!

Ответы [ 6 ]

12 голосов
/ 01 сентября 2009

Это сработало для меня

alert(document.getElementById('testInput').name);
document.getElementById('testInput').name = 'someName';
alert(document.getElementById('testInput').name);

С

<input type="radio" name="test" id="testInput" />
4 голосов
/ 01 сентября 2009

Sitepoint ложь говорит о другом использовании «имени» (см. Комментарий Энтони). Это не только для чтения, это просто давняя ошибка IE (до v7), в которой установка 'name' в полях формы эффективна лишь частично. В частности, переключатели не принимают его правильно.

Решение, одобренное Microsoft, , как подробно описано здесь , заключается в использовании ужасной ошибки в версии IE вызова createElement для установки атрибутов одновременно:

var radio= document.createElement('<input type="radio" name="test" value="a" />');

Вероятно, лучшим способом было бы просто использовать старый добрый innerHTML, например ::

var div= document.createElement('div');
div.innerHTML= '<input type="radio" name="test" value="a" />';
var radio= div.firstChild;
1 голос
/ 01 сентября 2009

Вы пытались просто присвоить новое имя свойству name? Я не уверен, как это кросс-браузер, но он должен работать с чем-либо, поддерживающим DOM уровня 1.

Я не уверен, почему вы бы использовали setAttribute для этого?

0 голосов
/ 22 января 2013

IE DOM не позволяет мне изменять атрибут имени во время выполнения. Тем не менее, используя jQuery для обновления атрибут name работает в IE. Я тестировал на IE9. Например,

<input id="ID0E2B" name="Field2" value="3" type="radio" />
$("#ID0E2B").attr("name", newName);
0 голосов
/ 01 сентября 2009

Рассматривая Совместимость W3C DOM - Core , вы можете попробовать использовать setAttributeNode () вместо setAttribute (). Может работать на IE 6 и выше.

0 голосов
/ 01 сентября 2009

Свойство name доступно не только для элементов ввода.

См. Спецификация .

...