因为一个导入功能,即时上传一个文件,就是通过file表单上的onchange事件,修改表单为文件可上传的模式(post/multi-data),再使用submit()方法提交。但发现了一个问题,导致研究了很久的js自动生成动态表单,和动态iframe,深感浏览器兼容性问题,以及IE无法解释原因的问题。

两天前,发现导入功能在ie下无法使用,查找原因,发现$_FILES没有值,说明没有上传文件,再看一下提交的表单信息,果然postdata里面没有文件内容。。

再网上查了很久,只有反映问题的,没有发现解决问题的。郁闷之余,自己开始尝试解决。

开始想到表单问题,使用js动态创建了一个表单,失败

又想到可能是属性问题,对表单的各种属性,使用js去创建,还是不行

后来又发现论坛有一处是可以以submit方式上传,它是提交到iframe的,所以认为通过iframe就可以上传文件了。还是使用动态的方式创建iframe。又发现了新的问题,ie下会弹出新窗口,网上一查并和同事确认,是创建时的兼容性问题,直接崩溃。于是使用兼容性写法,

if (BROWSER.ie) { var uploadiframe = document.createElement(‘<iframe name=”uploadiframe” id=”uploadiframe”></iframe>’); } else { var uploadiframe = document.createElement(‘iframe’); uploadiframe.name = ‘uploadiframe’; uploadiframe.id = ‘uploadiframe’; }

处理之后,发现仍然不行

之后再同事指点下,把iframe写成了静态的,排除动态可能不能兼容的问题,发现仍然有问题

莫非form表单也是静态的,但我原先就不是动态生成的,只是动态修改了几个属性,测试一下,发现原来是enctype=”multipart/form-data”这个属性,在ie下动态设置了之后,无效,但直接写在表单里就可以了。submit()终于好使了。

饶了好大一圈。。

终于解决了

发表评论

邮箱地址不会被公开。 必填项已用*标注