js实现上传文件添加和删除文件选择框


Posted in Javascript onOctober 24, 2016

本文这里给大家说个用javascript实现的很实用的功能,是在上传附件的时候,可以动态地添加和删除文件选择框,然后一次性上传。

从理论上看,实现起来比较容易,但实际工作的时候还是遇到两个难点,这些难点归结起来都是一个原因造成的,那就是浏览器的兼容性。在脚本中要用到两个函数:insertAdjacentHTML和removeChild,而恰好这两个函数在Firefox下都不能正常使用。几乎花费了一天的时候,在网上搜索着解决的方法,还好被找到了,也让我大松一口气。

具体两个函数是这样的:

<script type="text/javascript">
  //删除文件选择框
  function removeFile(id) {
    var new_tr = id.parentNode;
    try {
      //new_tr.removeNode(true);
      // just ie , not w3c;

      // other idea
      var tmp = new_tr.parentNode;
      // 为了在ie和firefox下都能正常使用,就要用另一个方法代替,最取上一层的父结点,然后remove.
      tmp.removeChild(new_tr);

     } catch(e) {}
  }
  
  //添加文件选择框
  function addFile(id)
  {
   var str = '<div><input type="file" runat="server" name="file" onKeyDown="this.blur();" oncontextmenu="return false" /><input type="button" value="删除" style="height:22px;" onclick="removeFile(this)" /></div>'
   insertHtml("beforeend",document.getElementById(id),str);
   }
</script>

页面上这样引用:

<div>
    <input type="button" value="添加附件(Add)" onclick="addFile('myfile')">
    </div>
  <div id="myfile">
</div>

在addFile函数中引用了另一个函数:insertHtml,这个函数主要是针对insertAdjacentHTML在firefox下无效的情况重写的,具体可以通过搜索insertAdjacentHTML找到。

PS:清除file框的内容

<input  type=file  name=ttt>    
 <input  type=button  onclick="ttt.select();document.execCommand('Delete');"   value=清除file框的内容>

第二个案例

文件上传,删除效果图:

刚开始:

js实现上传文件添加和删除文件选择框

点击按钮“选择更多后”,可以添加很多选择文件:

js实现上传文件添加和删除文件选择框

点击按钮“删除”后:

js实现上传文件添加和删除文件选择框

实现代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>选择文件</title>
<style type="text/css">
*{
margin:0px;
padding:0px;
}
div{
margin:10px;
}
</style>


<script>
//当点击添加更多时,增加一个DIV
//先增加两个input

function addFile(){
var fragment=document.createDocumentFragment();
var divNode=document.getElementById("container");

var newDiv=document.createElement("div");
newDiv.setAttribute("id","file");
fragment.appendChild(newDiv);

var newInput=document.createElement("input");
newInput.setAttribute("type","file");
newInput.setAttribute("name","选择文件");
newDiv.appendChild(newInput);

var newInput=document.createElement("input");
newInput.setAttribute("type","button");
newInput.setAttribute("value","删除");
newInput.setAttribute("onclick","delFile()");
newInput.setAttribute("id","1");
newDiv.appendChild(newInput);

divNode.appendChild(fragment);
}
function delFile(){
var divNode=document.getElementById("container");
divNode.removeChild(divNode.firstElementChild);
}
</script>
</head>
<body>
<input type="button" value="选择更多" onclick="addFile()"/>
<div id="container">
<div id="file">
<input type="file" name="选择文件"/>
<input type="button" value="删除" onclick="delFile()" />
</div>
</div>
</body>
</html>

代码瑕疵:!!!!在删除函数中,我选择的是删除第一个元素节点,而不是真正意义上的删除当前按钮,不知道怎么改善,求改正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中Eval函数的使用说明
Oct 11 Javascript
jquery.ui.draggable中文文档
Nov 24 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
轻松实现JavaScript图片切换
Jan 12 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
jQuery实现弹幕效果
Feb 17 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 #Javascript
第一次接触Bootstrap框架
Oct 24 #Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 #Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 #Javascript
Javascript 实现简单计算器实例代码
Oct 23 #Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 #Javascript
jquery 实现回车登录详解及实例代码
Oct 23 #Javascript
You might like
php curl post 时出现的问题解决
2014/01/30 PHP
php根据年月获取季度的方法
2014/03/31 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
extJs 下拉框联动实现代码
2010/04/09 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
JavaScript模拟push
2016/03/06 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
Structs界面控制层技术
2013/10/11 面试题
Java面向对象面试题
2016/12/26 面试题
教师师德教育的自我评价
2013/10/31 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
DIY胆机必读:各国电子管评价
2022/04/06 无线电