CSDN-CSDN社区-Web 开发-JavaScript

收藏 [推荐] 类似gmail添加附件[问题点数:20,结帖人:hancheng]

  • hancheng
  • (hancheng)
  • 等 级:
  • 结帖率:
楼主发表于:2008-08-20 07:31:17
想做一个管理后面,想用到gmail添加附件的功能到添加产品图,找了很多源码都不合适,找到了一段,但在FF下有问题。
++++++++++++++++

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script type="text/javascript">
/************************
* author lijun
* date 2007.5.25
*
* 无刷新上传
* IE,Firefox下和Gmail类似的附件添加方式
* 允许进一步扩展,实现附件添加后即自动上传得功能。
* 2007.5.30修正了一个bug.
************************/
 
/* 检测浏览器类型 */
  function isIE()
  {
              if(document.attachEvent)
              {
                      return true;
              }
              else
              {
                      return false;
              }
  }
 
/*firefox下的附件添加提示*/
  function getFirefoxTip(form)
  {
              var str="添加一个附件";
              var cssStr="width:100px;font:12px Arial;color:#00f;text-decoration:underline";
              var tipDiv=document.createElement("div");
              tipDiv.style.cssText=cssStr;
              tipDiv.innerHTML=str;
              tipDiv.onclick=function()
              {
                      var i=form.getAttribute("count")?form.getAttribute("count"):0;
                      createFirefoxInput(form,parseInt(i)+1);
              };
              return tipDiv;
  }
 
回复次数:51
#1楼 得分:0回复于:2008-08-20 07:31:31
/*删除已经添加的附件项*/
  function removeChild(parent,child,tip)
  {
                 
              var i=parent.getAttribute("count");
              if(isIE())
              {
                      var id=parseInt(child.getAttribute("id"));
                      parent.removeChild(child);
                      parent.removeChild(tip);
                      i--;
                                              /*
                      var tipAry=new Array();
                      var inputAry=new Array();
                      for(j=0;j <parent.childNodes.length;j++)
                      {
                              var node=parent.childNodes[j];
                              if(node.nodeType==1)
                              {
                                      if(node.getAttribute("idi"))
                                      {
                                              inputAry.push(node);
                                      }
                                      else if(node.getAttribute("idt"))
                                      {
                                              tipAry.push(node);
                                      }
                              }
                      }
                      for(j=0;j <tipAry.length;j++)
                      {
                              var position=getPosition(tipAry[j]);
                              inputAry[j].style.top=position.top+"px";
                              inputAry[j].style.left=position.left+"px";
                      }
                                              */
                                              var tipAry=rePlaceInput(parent);
                      if(i==0)
                      {
                              tipAry[i].innerHTML="添加一个附件";
                      }
              }
              else
              {
                      parent.removeChild(child);
                      i--;
                      if(i==0)
                      {
                              tip.innerHTML="添加一个附件";
                      }
              }
         
              parent.setAttribute("count",i);
                 
  }
 
  /* 添加移除项 */
  function getRemove(form,node,tip)
  {
              var text="移除";
              var span=document.createElement("span");
              span.style.cssText="font:10px Arial;color:#00f;text-decoration:underline;";
          span.innerHTML=text;
              span.onclick=function(){removeChild(form,node,tip);}
              return span;
  }
 
  /* firefox下的文件选择框 */
  function createFirefoxInput(form,inputIndex)
  {
              var i=inputIndex?inputIndex:0;
              var tip=i==0?getFirefoxTip(form):form.lastChild;
              if(i==0)
              {
                      form.appendChild(tip);
              }
              else
              {
                      var inputDiv=document.createElement("div");
                      var input=document.createElement("input");
                      input.setAttribute("type","file");
                      input.setAttribute("name","file_"+i);
                      input.onchange=function(){
                                 
                      }
                      inputDiv.appendChild(input);
                      inputDiv.appendChild(getRemove(form,inputDiv,tip));
                      form.insertBefore(inputDiv,tip);
                      form.setAttribute("count",i);
                      tip.innerHTML="再添加一个附件";
              }
                 
      }
 
  /* firefox下的初始化函数 */
  function initFirefox()
  {
              var form=document.forms['uploadForm'];
              createFirefoxInput(form);
  }
 
  /* 获取指定元素在页面的位置 */
      function getPosition(obj)
      {
              var top=0,left=0;
              while(obj.offsetParent)
              {
                      top+=obj.offsetTop;
                      left+=obj.offsetLeft;
                      obj=obj.offsetParent;
              }
              return {top:top,left:left};
      }
 
      /* IE下的附件添加提示 */
      function getIeTip(form)
  {
              var str=parseInt(form.getAttribute("count"))>=0?"再添加一个附件":"添加一个附件";
              var cssStr="font:12px Arial;color:#00f;text-decoration:underline";
              var tipDiv=document.createElement("div");
              tipDiv.style.cssText=cssStr;
              tipDiv.innerHTML=str;
              return tipDiv;
  }
         
      /*IE下的文件按选择显示*/
      function updateIeInput(input,tip)
      {
              var parent=input.parentNode;
              parent.style.zIndex=-2;
              tip.style.textDecoration="none";
              tip.style.color="#000000";
              tip.style.fontWeight="bold";
              tip.innerHTML=input.value;
              tip.appendChild(getRemove(input.form,parent,tip));
      }
 
      /*创建IE下的文件选择框*/
      function createIeInput(form,inputIndex)
  {
              var i=inputIndex?inputIndex:0;
              var tip=getIeTip(form);
              tip.setAttribute("idt",i)
              form.appendChild(tip);
              var inputDiv=document.createElement("div");
              var input=document.createElement("input");
              input.setAttribute("type","file");
              input.setAttribute("name","file_"+i);
              input.style.cssText="width:0";
              input.onchange=function(){
                              createIeInput(this.form,parseInt(this.form.getAttribute("count"))+1);
                              updateIeInput(this,tip);
                                                              rePlaceInput(this.form);
              }
              inputDiv.appendChild(input);
              inputDiv.setAttribute("idi",i);
              var position=getPosition(tip);
              inputDiv.style.cssText="position:absolute;top:"+position.top+"px;left:"+position.left+"px;filter:alpha(opacity=0);z-index:2";
              form.appendChild(inputDiv);
              form.setAttribute("count",i);
                 
      }
 
/* 重新置位*/
function rePlaceInput(parent)
{
        var tipAry=new Array();
    var inputAry=new Array();
    for(j=0;j <parent.childNodes.length;j++)
    {
      var node=parent.childNodes[j];
      if(node.nodeType==1)
      {
          if(node.getAttribute("idi"))
          {
              inputAry.push(node);
          }
          else if(node.getAttribute("idt"))
          {
              tipAry.push(node);
          }
        }
      }
      for(j=0;j <tipAry.length;j++)
      {
          var position=getPosition(tipAry[j]);
          inputAry[j].style.top=position.top+"px";
          inputAry[j].style.left=position.left+"px";
      }
        return tipAry;
}
 
      /*初始化IE*/
  function initIE()
  {
              var form=document.forms["uploadForm"];
              createIeInput(form);
                              window.onresize=function(){
                                rePlaceInput(form);
                              }
  }
   
  /* 初始化 */
  function init()
  {
              if(isIE())
              {
                      initIE();
              }
              else
              {
                      initFirefox();
              }
  }
</script>
</HEAD>
 
<BODY onload="init()">
<form name="uploadForm" action="/upload.do" target="upload" enctype="multipart/form-data" method="post">
</form>
<iframe name="upload" style="display:none"> </iframe>
</BODY> </HTML>

#2楼 得分:0回复于:2008-08-20 07:32:29
以上代码在FF下有问题,有谁能帮我改一下呢?
#3楼 得分:0回复于:2008-08-21 08:04:11
无人
#4楼 得分:0回复于:2008-08-21 08:43:50
帮顶一下,虽然我没有办法解决
#5楼 得分:0回复于:2008-08-21 13:03:11
再无人
#6楼 得分:0回复于:2008-08-22 07:46:47
早上起来再顶帖,再无人就删除了。
  • muxrwc用户头像
  • muxrwc
  • (王好奇)
  • 等 级:
  • 2

#7楼 得分:0回复于:2008-08-22 10:12:18
别删啊。
  • muxrwc用户头像
  • muxrwc
  • (王好奇)
  • 等 级:
  • 2

#8楼 得分:20回复于:2008-08-22 10:13:14
  • muxrwc用户头像
  • muxrwc
  • (王好奇)
  • 等 级:
  • 2

#9楼 得分:0回复于:2008-08-22 10:15:14
http://www.cntuw.com//attachment/week_0825/161_12090514_3c2aad3ea894112.gif
这个是那张图片的地址。。
就是F2.gif

#10楼 得分:0回复于:2008-08-22 15:00:44
收藏
#11楼 得分:0回复于:2008-08-22 19:15:16
well!
能控制文件数,文件类型,文件大小就最好了。
最好加上一个点文件时可以在新窗口直接打开文件预览一下。
这个我想用在管理后台添加产品图上。
  • muxrwc用户头像
  • muxrwc
  • (王好奇)
  • 等 级:
  • 2

#12楼 得分:0回复于:2008-08-25 11:43:29
最好加上一个点文件时可以在新窗口直接打开文件预览一下。

这个应该是无法实现的,因为只有IE可以实现阅览本地文件吧貌似。。。- -

文件大小和个数还有格式

个数和格式可以设置从里面改下就好了。。。
不过文件大小,也只可以从IE里做控制。。。。
#13楼 得分:0回复于:2008-11-06 17:23:47
学习
#14楼 得分:0回复于:2008-11-06 17:35:44
不错,楼主和muxrwc都费心啦!
帮顶!
#15楼 得分:0回复于:2008-11-06 18:35:12
神啊,直晕
  • awengu用户头像
  • awengu
  • (明明)
  • 等 级:
#16楼 得分:0回复于:2008-11-06 19:48:21
OK
#17楼 得分:0回复于:2008-11-06 21:44:23
OK
#18楼 得分:0回复于:2008-11-06 21:48:57
灌水刷分
  • ming4098用户头像
  • ming4098
  • (工作后到动物园才觉得自己是个人)
  • 等 级:
  • 6

    3

    2

#19楼 得分:0回复于:2008-11-06 21:54:21
mark
#20楼 得分:0回复于:2008-11-06 23:01:57
学习
#21楼 得分:0回复于:2008-11-06 23:03:41
支持一下,不错
#23楼 得分:0回复于:2008-11-07 10:04:12
支持一下,不错
#24楼 得分:0回复于:2008-11-07 16:04:05
帖是一种美德!传说每天回帖即可获得 10 分可用分!帮楼主顶一下
  • eood1用户头像
  • eood1
  • (eood1)
  • 等 级:
#25楼 得分:0回复于:2008-11-08 17:08:58
回帖是一种美德
#26楼 得分:0回复于:2008-11-09 14:11:16
支持AJAX
#27楼 得分:0回复于:2008-11-09 14:19:23
看看
#30楼 得分:0回复于:2008-11-10 11:13:45
顶一下
#31楼 得分:0回复于:2008-11-10 11:41:20
问题是否解决?我曾经也遇到这个问题,也没有解决
  • ytx98用户头像
  • ytx98
  • (相忘于江湖)
  • 等 级:
#32楼 得分:0回复于:2008-11-10 16:29:07
顶一下吧 跟的太长了 看得头晕哈
#33楼 得分:0回复于:2008-11-10 18:41:32
好高深哦,希望自己有一天也能达到这种境界
#34楼 得分:0回复于:2008-11-11 09:41:01
mark……
  • ertyur用户头像
  • ertyur
  • (ertyur)
  • 等 级:
#35楼 得分:0回复于:2008-11-11 12:15:15
支持一个
#36楼 得分:0回复于:2008-11-12 19:42:10
谢谢
#37楼 得分:0回复于:2008-11-12 21:07:42
学习
#38楼 得分:0回复于:2008-11-12 21:55:27
学习
  • zhuyx808用户头像
  • zhuyx808
  • (哦哦哦啊啊啊!)
  • 等 级:
#39楼 得分:0回复于:2008-11-14 16:37:53
打个标记
  • ww_680用户头像
  • ww_680
  • (ww_680)
  • 等 级:
#40楼 得分:0回复于:2008-11-16 11:17:47
好啊
  • llwxzy用户头像
  • llwxzy
  • (llwxzy)
  • 等 级:
#41楼 得分:0回复于:2008-11-26 15:17:30
仿126的那段代码挺好,但是就是第一附件显示不出来,也没有判断第一个附件,能否完善下
#42楼 得分:0回复于:2008-12-16 11:18:55
不错,学习了。。。。
#43楼 得分:0回复于:2009-01-16 15:45:23
顶上。。。。。。。。。
  • ulear用户头像
  • ulear
  • (D.D)
  • 等 级:
#44楼 得分:0回复于:2009-01-21 09:52:16
126的功能收藏了
#45楼 得分:0回复于:2009-07-23 13:40:13
神啊 我也晕
只是帮顶
回帖是一种美德
#46楼 得分:0回复于:2009-07-23 13:55:55
我顶
#47楼 得分:0回复于:2009-07-25 16:22:30
JavaScript无处不在
#48楼 得分:0回复于:2009-10-11 12:57:52
学习。
#49楼 得分:0回复于:2009-10-13 08:58:20
支持........
#50楼 得分:0回复于:2009-11-09 09:57:14
学习
#51楼 得分:0回复于:2009-11-11 09:40:52
收藏
相关问题
无刷新上传文件,类似Gmail的上传文件
实现类似Gmail,163邮箱的多文件上传,谁有比较好的办法
如何打开“选择文件”对话框,并能得到返回的文件路径字符串? .NET技术 ...
问个弱弱的问题: GMail是什么呀? Google提供一些什么特色功能吗? 还是 ...
附件上传页面终于做完了Java / Web 开发- CSDN社区community.csdn.net
谁也是用yahoo电邮!与其相关的jsp问题。 Java / Web 开发- CSDN社区 ...