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 相关文章推荐
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
JavaScript实现动态增加文件域表单
Feb 12 Javascript
jQuery中add实现同时选择两个id对象
Oct 22 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
Apr 27 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
Mar 27 Javascript
简述AngularJS相关的一些编程思想
Jun 23 Javascript
jQuery实现图片轮播特效代码分享
Sep 15 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
react+redux仿微信聊天界面
Jun 21 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
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
AngularJS中filter的使用实例详解
2017/08/25 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
python中反射用法实例
2015/03/27 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
python如何读写json数据
2018/03/21 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Python 实现简单的客户端认证
2020/07/29 Python
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
客服部工作职责范本
2014/02/14 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
人力资源部工作计划
2019/05/14 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
python基础详解之if循环语句
2021/04/24 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs