上传文件动态设置enctype

来源:互联网 发布:服务器怎么绑定域名 编辑:程序博客网 时间:2024/05/22 17:16
以下是最常见上传文件片段

  1. <form id="upform" name="upform" action="upload.php" method="post" enctype="multipart/form-data">
  2. <input type="file" name="uploadfile[]" />
  3. <input type="file" name="uploadfile[]" />
  4. <button type="submit" >upload</button>
  5. </form>
复制代码


有点js知识得人可能试图用js检查并控制enctype得类型

  1. form=document.getElementById('upform');
  2. if(form.getAttribute('enctype')!='multipart/form-data'){
  3.     form.setAttribute('enctype','multipart/form-data');
  4. }
复制代码

以上代码完全按照W3C格式
FF下运行良好 但是IE不兼容,其它浏览器可以不兼容,就IE不能不兼容
在看YUI类库时得到启发
IE中form没有enctype属性,只有encoding属性,那么以上代码改写为

  1. form=document.getElementById('upform');
  2. if(form.getAttribute('enctype')!='multipart/form-data'&&form.encoding!='multipart/form-data')
  3.   if(form.encoding){
  4.       form.setAttribute('encoding','multipart/form-data');
  5.   }else{
  6.       form.setAttribute('enctype','multipart/form-data');
  7.   }
  8. }
  9. //最外成if判断可以去掉 因为你是要设置它可以上传文件
复制代码

这样你可以试试这样得代码了

  1. <script type="text/javascript">
  2. function upload(form){
  3.   if(form.encoding){
  4.       form.setAttribute('encoding','multipart/form-data');
  5.   }else{
  6.       form.setAttribute('enctype','multipart/form-data');
  7.   }
  8.   form.setAttribute('method',post');
  9.   if(!form.getAttribue('action')){
  10.       form.setAttribute('action',location.href);
  11.   }
  12.   form.submit();
  13. }
  14. </script>
  15. <form action="upload.php" onsubmit="try{upload(this);}catch(e){};return false;">
  16. <input type="file" name="uploadfile[]" />
  17. <input type="file" name="uploadfile[]" />
  18. <button type="submit" >upload</button>
  19. </form>
复制代码