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 原型学习总结
Oct 29 Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
Nov 01 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
微信小程序实现锚点功能
Nov 20 Javascript
JavaScript 实现页面滚动动画
Apr 24 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容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
js实现常用排序算法
2016/08/09 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
python二叉树遍历的实现方法
2013/11/21 Python
python计算时间差的方法
2015/05/20 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
给学校建议书范文
2014/05/13 职场文书
新闻编辑求职信
2014/07/13 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2015年化验员工作总结
2015/04/10 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL