当前位置:  开发笔记 > 编程语言 > 正文

IE没有提交; 动态添加表单元素; 这是IE漏洞吗?

如何解决《IE没有提交;动态添加表单元素;这是IE漏洞吗?》经验,为你挑选了1个好方法。

我写了一些Javascript来允许编辑HTML表单中的项目列表,包括添加和删除项目.它在Firefox中运行.在Internet Explorer中尝试时,我发现任何添加的项目都没有随表单一起提交.

长话短说......大量简化,调试,找出触发IE忽略新表单输入的行.所以解决了行为问题.

但现在我必须问:为什么?这是IE漏洞吗?

这是简化的代码:



    Test
    


    
Add

要试一试,明白:在IE中加载,单击添加,单击提交,查看地址栏中的内容.如果取消注释最后一行add(),IE将突然停止报告field3.它在Firefox中都可以正常工作.

有任何想法吗?一个好奇的头脑想要知道.(如果需要,我如何以便携方式添加文本,所以IE很开心?)



1> bobince..:

这是IE漏洞吗?

似乎如此.当您通过DOM方法创建元素时,IE不会完全选择"name"属性.元素确实提交了,但如果你试图得到元素的'innerHTML'表示,它会神秘地消失.如果通过直接写入innerHTML来创建元素,则不会发生这种情况.

此外,如果您使用DOM Level 0表单导航方法,例如'myform.elements.x.value',则通过'elements'数组访问可能不起作用(类似于直接'myform.x'访问某些人误导使用).在任何情况下,您可能更喜欢getElementById().

所以要么使用innerHTML,要么使用DOM方法; 最好不要在创建表单字段时混合它们.

这是记录的(参见'备注'),最后在IE8中修复.

无论如何,永远不要这样做:

div.innerHTML + ='...';

这只是语法糖:

div.innerHTML = div.innerHTML +'...';

换句话说,它必须序列化元素的整个子HTML内容,然后执行字符串连接,然后将新字符串重新解析回元素,丢弃所有原始内容.这意味着你丢失了任何无法序列化的东西:以及IE的虚假半创建'name'属性,这也意味着任何JavaScript事件处理程序,DOM Listeners或你附加到每个子元素的其他自定义属性.此外,不必要的序列化/解析周期很慢.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有