设置DOM创建的元素的名称在IE中失败 – 解决方法?
今天我有点辛苦了:
function mk_input( name, val ) { var inp = document.createElement( 'input' ); inp.name = name; inp.value = val; inp.type = 'hidden'; return inp; }
事实certificate,设置通过createElement
创建的元素的name
在IE中不起作用。 它不会导致错误或任何事情,它只是默默地失败,导致人们思考为什么他们的隐藏字段没有正确填充。
据我所知,没有解决方法。 你必须咬住子弹并通过字符串操作创建标签,然后用
.innerHTML
其粘贴。
有没有更好的办法? 也许像jQuery这样的东西? 我做了一个粗略的搜索,并没有找到任何与JQuery中的createElement
完全类似的东西,但也许我错过了一些东西。
只是为了重新解决问题:在IE中,以编程方式设置通过document.createElement('input')
创建的元素的name
属性不会反映在getElementsByName
, form.elements
(如果附加到表单)中,并且未提交与form
(再次,如果附加到表格)[ 参考 ]。
这是我过去使用过的解决方法( 从这里开始适应你的问题):
function mk_input( name, val ) { var inp; try { inp = document.createElement(''); } 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 $('') .val(val) .get(0) }
(作为旁注,jQuery正在做你在你的问题中描述的内容:它创建一个虚拟
并将其 他们在IE8中解决了这个问题。 在以前的版本中,您需要在调用createElement时包含该名称。 来自MSDN : Internet Explorer 8及更高版本可以在运行时在使用IHTMLDocument2 :: createElement方法动态创建的元素上设置NAME属性。 要在早期版本的Internet Explorer中创建具有NAME属性的元素,请在使用IHTMLDocument2 :: createElement方法时包含该属性及其值。 以下是MSDN的示例: innerHTML
设置为
var newRadioButton = document.createElement("")