设置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属性不会反映在getElementsByNameform.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正在做你在你的问题中描述的内容:它创建一个虚拟

并将其innerHTML设置为

他们在IE8中解决了这个问题。 在以前的版本中,您需要在调用createElement时包含该名称。 来自MSDN :

Internet Explorer 8及更高版本可以在运行时在使用IHTMLDocument2 :: createElement方法动态创建的元素上设置NAME属性。 要在早期版本的Internet Explorer中创建具有NAME属性的元素,请在使用IHTMLDocument2 :: createElement方法时包含该属性及其值。

以下是MSDN的示例:

 var newRadioButton = document.createElement("")