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 相关文章推荐
jquery $.ajax各个事件执行顺序
Oct 15 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
vue异步axios获取的数据渲染到页面的方法
Aug 09 Javascript
JS实现的自定义map方法示例
May 17 Javascript
细说webpack6 Babel的使用详解
Sep 26 Javascript
vue 解决遍历对象显示的顺序不对问题
Nov 07 Javascript
实例分析javascript中的异步
Jun 02 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
Nov 05 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php精度计算的问题解析
2019/06/21 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
用js实现in_array的方法
2013/11/05 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
如何编写jquery插件
2017/03/29 jQuery
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
python之pandas用法大全
2018/03/13 Python
python实现简单井字棋游戏
2020/03/04 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
python函数超时自动退出的实操方法
2020/12/28 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
毕业生机械建模求职信
2013/10/14 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
MySQL 字符集 character
2022/05/04 MySQL