js如何清空input file的值

 更新时间:2023年01月21日 08:22:19   作者:lihefei_coder  
这篇文章主要介绍了js如何清空input file的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

js清空input file的值

在做选择本地图片上传的功能时遇到一个问题,第一次点file按钮选择图片完成会触发onchange事件,获取文件后动态在界面上创建img标签展示,但把创建的img元素节点删除后,再点file按钮选择同一个文件后发现图片并没有被重新创建出来。

分析了原因

因为上一次选择的文件与本次选择的是同一个文件,两次的路径值相同,值没有改变所以导致file不会触发onchange事件,因此需要每次创建完img后重置file的value或者重置file的dom来解决这个问题。

方案一

每次创建完img后把file的value值重置为空字符串(设其它值会报错)

提示:浏览器的安全机制不允许直接用js修改file的value为空字符串以外的值,强制修改会报以下错误:

VM4061:1 Uncaught DOMException: Failed to set the ‘value’ property on ‘HTMLInputElement’: This input element accepts a filename, which may only be programmatically set to the empty string.

var file = document.getElementById('file');
file.value = ''; //file的value值只能设置为空字符串

方案二

每次创建完img后把file的outerHTML重置

var file = document.getElementById('file');
file.outerHTML = file.outerHTML; //重置了file的outerHTML

纯js清空input File

function cleanFile(id){		      	  	   
  var _file = document.getElementById(id);          
  if(_file.files) 
    _file.value = "";
  else{  
    if (typeof _file != "object") return null;          
    var _span = document.createElement("span");   
    _span.id = "__tt__";   
    _file.parentNode.insertBefore(_span,_file);   
    var tf = document.createElement("form");   
    tf.appendChild(_file);   
    document.getElementsByTagName("body")[0].appendChild(tf);   
    tf.reset();   
    span.parentNode.insertBefore(_file,_span);   
    _span.parentNode.removeChild(_span);   
    _span = null;   
    tf.parentNode.removeChild(tf);
  } 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入解析js轮播插件核心代码的实现过程

    深入解析js轮播插件核心代码的实现过程

    这篇文章主要深度揭密了js轮播插件核心代码的实现过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • JavaScript中防止微信浏览器被整体拖动的方法

    JavaScript中防止微信浏览器被整体拖动的方法

    这篇文章主要介绍了JavaScript中防止微信浏览器被整体拖动的方法,需要的朋友可以参考下
    2017-08-08
  • 实例详解JavaScript中setTimeout函数的执行顺序

    实例详解JavaScript中setTimeout函数的执行顺序

    关于javascript的运行机制大家都应该有所了解了吧,其实javascript是一个单线程的机制,但是因为队列的关系它的表现会让我们感觉是一个多线程的错觉。下面这篇文章通过实例主要给大家介绍了关于JavaScript中setTimeout函数执行顺序的相关资料,需要的朋友可以参考下。
    2017-07-07
  • JS+CSS实现仿支付宝菜单选中效果代码

    JS+CSS实现仿支付宝菜单选中效果代码

    这篇文章主要介绍了JS+CSS实现仿支付宝菜单选中效果代码,涉及JavaScript基于鼠标事件动态设置页面css样式的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 从零使用TypeScript开发项目打包发布到npm

    从零使用TypeScript开发项目打包发布到npm

    这篇文章主要介绍了从零使用TypeScript开发项目打包发布到npm,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • js根据当前日期获取前一周或者后一周等日期

    js根据当前日期获取前一周或者后一周等日期

    有的时候要获取当前日期,或者前一天、后一天的日期,下面这篇文章主要给大家介绍了关于js根据当前日期获取前一周或者后一周等日期的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • 微信小程序如何调用json数据接口并解析

    微信小程序如何调用json数据接口并解析

    这篇文章主要介绍了微信小程序如何调用json数据接口并解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • 微信小程序传值以及获取值方法的详解

    微信小程序传值以及获取值方法的详解

    这篇文章主要介绍了微信小程序传值以及获取值方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • javascript:FF/Chrome与IE动态加载元素的区别说明

    javascript:FF/Chrome与IE动态加载元素的区别说明

    今天在写一段js时,发现IE与FF在动态加载Html元素时,有一些差别,一起过来看看下面的代码吧
    2014-01-01
  • 按下回车键指向下一个位置的一个函数代码

    按下回车键指向下一个位置的一个函数代码

    本篇文章主要是对按下回车键指向下一个位置的一个函数代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03

最新评论