<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_0" multiple>  文件域

遇到的几个BUG 已经解决

1 多选文件域,如果没有上传成功或已上传成功,再次点击文件域名选择图片时,会累积上次的文件。

例如 第一次上传1.jpg  第二次点击上传 2.jpg 第二次的上传结果为1.jpg 2.jpg 上传了两张。

解决此问题思路:

1 在网上查了很多关于清除file文件域的办法,都不起作用/

2 最终用了删除直接的file文件域 重新创建一个file文件域 重新绑定事件,重复上传文件解决。

  1. /**
  2. * 初始化图片上传文件
  3. */
  4. function init_list_imgs(){
  5. if(!(window.FileReader && window.File && window.FileList && window.Blob)){
  6. $.alert('您的浏览器不支持fileReader');
  7. return false;
  8. }
  9. add_imgs();
  10. }
  11.  
  12. /**
  13. * 动态添加的图片上传
  14. */
  15. function add_imgs(){
  16. imgs_div_html = '\
  17. <li id="img_nav">\
  18. <div class="item-content">\
  19. <div class="item-media">\
  20. <i class="icon icon-form-name"></i>\
  21. </div>\
  22. <div class="item-inner">\
  23. <div class="item-title label">外观</div>\
  24. <div class="item-input">\
  25. <span class="icon icon-down" id="direct_ico" style="float: right"></span>\
  26. <div style="clear: both;"></div>\
  27. </div>\
  28. </div>\
  29. </div>\
  30. </li>\
  31. <li class="li_imgs" style="display:none">\
  32. <div class="imgs">\
  33. <input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_0" multiple>\
  34. <span></span>\
  35. </div>\
  36. </li>';
  37. $('#wash_car_mem').after(imgs_div_html);
  38. //点击 外观 事件
  39. img_nav();
  40. //绑定 事件
  41. bind_event();
  42. }
  43.  
  44. /**
  45. * 首次
  46. */
  47. function bind_event(){
  48. var file_input = $('.li_imgs').children('.imgs').last().children().first();
  49. file_input_change(file_input);
  50. }
  51.  
  52. /**
  53. * 区分 Ios android 绑定 文件上传事件
  54. */
  55. function file_input_change(file_input){
  56.  
  57. file_input.next('span').on('click',function(){
  58. $('#file_input_ss_'+file_input_id).click().trigger();
  59. });
  60.  
  61. file_input.on('click',function(){
  62. $(this).attr('disabled');
  63. var u = navigator.userAgent;
  64. if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
  65. // 调安卓接口,调拍照和相册的弹窗
  66. window.androidJsInterface.obtainFile();
  67. } else {
  68. ios_bind_change(file_input);
  69. }
  70. });
  71. }
  72. /**
  73. * IOS 文件上传事件绑定
  74. */
  75. function ios_bind_change(file_input){
  76. file_input.on('change',function(){
  77. //单通道
  78. if(_deny_request){
  79. remove_file_input($(this))
  80. return;
  81. }
  82. _deny_request = true;
  83. //载入动画
  84. $.showPreloader(_up_img_msg);
  85. if(!this.files.length){
  86. $('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
  87. $.hidePreloader();
  88. _deny_request = false;
  89. return;
  90.  
  91. }else if(this.files.length > 6){
  92. $.hidePreloader();
  93. $.alert('一次最多只能选择6张图片哦',function(){_deny_request = false;$('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');remove_file_input($(this));});
  94. return;
  95. }else{
  96. var s = check_file(this.files);
  97. remove_file_input($(this));
  98. }
  99. });
  100. }
  101.  
  102. /**
  103. * 删除文件上传域 解决部分机型重复上传问题
  104. */
  105. function remove_file_input(file_input){
  106. file_input.remove();
  107. ++file_input_id;
  108. $('.li_imgs').children('.imgs').last().children('span').before('<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_'+file_input_id+'" multiple>');
  109. file_input_change($('#file_input_ss_'+file_input_id));
  110. }
  111.  
  112. /**
  113. * IOS 图片上传
  114. */
  115. function check_file(files){
  116. //校验收集表单数据
  117. var formdata = new FormData();
  118. var bad_files = 0;
  119. for(var i=0; i<files.length;i++){
  120. if(/image\/\w+/.test(files[i].type)){
  121. formdata.append("imgFile"+i, files[i]);
  122. }else{
  123. bad_files++;
  124. }
  125. }
  126. if(bad_files >= files.length){
  127. $.hidePreloader();
  128. $('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
  129. _deny_request = false;
  130. return;
  131. }
  132. //提交
  133. $.ajax({
  134. type: "POST",
  135. dataType: "json",
  136. contentType: false,
  137. cache : false,
  138. processData : false,
  139. async: true,
  140. url: '?c=bzymgr/washcar&a=add_imgs&openid=<?php echo $this->openid;?>',
  141. data:formdata,
  142. success: function (res) {
  143. if(res=='0'){
  144. public_toast('照片上传失败,请稍后重试',1000);
  145. return;
  146. }
  147. var html = '';
  148. for(var i in res){
  149. html += '<div class="imgs">\
  150. <img src="'+res[i]+'" class="thumb_img"/>\
  151. <b class="img_cancel" onclick="remove_img(this)">X</b>\
  152. </div>';
  153. //存储到localStorage
  154. add_imgs_LocalStorage(res[i]);
  155. }
  156. //插入dom
  157. $('.li_imgs').children('.imgs').last().before(html);
  158. setTimeout(function(){
  159. $.hidePreloader();
  160. $('.li_imgs').children('.imgs').last().children().first().removeAttr('disabled');
  161. _deny_request = false;
  162. },1000);
  163. return;
  164. },
  165. error:function(){
  166. public_toast('服务器离家出走了,请稍后重试',2000);
  167. return;
  168. },
  169. });
  170. }
  171.  
  172. /**
  173. * 删除 已上传图片
  174. * 只删除本地 服务器不删除
  175. */
  176. function remove_img(obj){
  177. $.confirm('确认要删除这张图片吗?',function(){
  178. pop_imgs_LocalStorage($(obj).prev('img').attr('src'));
  179. $(obj).parent().remove();
  180. return;
  181. });
  182. }

以上代码在IOS 9.3.1 中用 Input file 可以调用出 相册和相机

但是在IOS 8.4版本中,就直接访问相册了。 目前还没有好找到好的解决办法。

h5 input file ajax实现文件上传的更多相关文章

  1. input file美化,文件上传

    此文学习至:http://www.haorooms.com/post/input_file_leixing 然而只会用,不会做,UI泪茫茫 效果图: 原图: 美化后: 此主要用css美化表单,然后用J ...

  2. vue项目内嵌入到app input type=file 坑(文件上传插件)

    w问题描述: 我用vue-cli完成的一个移动端项目,内嵌到app当中,用原生的input type=file 来完成文件上传.在安卓下没有问题但是在苹果手机 上传第二次手机就会发生白屏 并无缘无故跳 ...

  3. ajax提交表单、ajax实现文件上传

    ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用 ...

  4. Ajax 与文件上传

    一 Ajax篇 1 ajax简介(Asynchronous Javascript And XML) 异步,Js,XML,即使用Javascript语言与服务器进行异步交互,传输的数据为xml(可扩展标 ...

  5. 基于 Django的Ajax实现 文件上传

    ---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...

  6. ajax与文件上传

    一.ajax ajax(Asynchronous JavaScript And XML):异步JavaScript和XML,即使用JavaScript语句与服务器进行异步交互,传输的数据为XML(也可 ...

  7. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  8. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Django学习笔记之Ajax与文件上传

      Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

随机推荐

  1. 【转】JS 和 java 交互

    android中如何获得webView中的内容发表于 2011 年 06 月 13 日 由 admin本文概要:在程序中经常会用到webView来显示网页,但如果能够得到网页中的内容呢,本文将给你一个 ...

  2. YTU 3006: 迷宫问题(栈与队列)

    3006: 迷宫问题(栈与队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...

  3. ResultSetMetaData和DatabaseMetaData实现数据库中属性,属性值,属性所赋值的获取等

    ----------------------------------------------有些类下面代码中有; public class Test1 { TestDAO t=new TestDAO( ...

  4. 这题实在不知道起啥名好了 分类: sdutOJ 2015-06-22 17:17 19人阅读 评论(0) 收藏

    这题实在不知道起啥名好了 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 懒得想背景故事了,开门见山. 有一个长度为n的整数数列A ...

  5. 【20160924】GOCVHelper MFC增强算法(5)

    CString ExportListToExcel(CString  sExcelFile,CListCtrl* pList, CString strTitle)     {         CStr ...

  6. CPU和GPU实现julia

    CPU和GPU实现julia           主要目的是通过对比,学习研究如何编写CUDA程序.julia的算法还是有一定难度的,但不是重点.由于GPU实现了也是做图像识别程序,所以缺省的就是和O ...

  7. ASP函数大全

    ASP函数大全 Array() FUNCTION: 返回一个数组 SYNTAX: Array(list) ARGUMENTS: 字符,数字均可 EXAMPLE: <% Dim myArray() ...

  8. PHP脚本memcache类的源码

    <?php /**  * @example $mem = new Memcached();  * @example $getCache = $mem->get('test');  * @e ...

  9. for循环以及复杂if else 例题

    for循环语句 例一. 请输入一个整数,求1加到这个整数的和 例二 请从1到100 以内和7 有关的数字 例三,请设计一个游戏,前20关每关的分数是本身,21到30 是10分每关.31到40是20分每 ...

  10. iOS:堆(heap)和栈(stack)的理解

    Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就 ...