自知其無知
          不懂,慢慢懂。
          posts - 2,comments - 2,trackbacks - 0
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="www.w3.org/1999/xhtml">
          <head>
          <title>網(wǎng)頁特效-表單特效-仿163網(wǎng)盤無刷新文件上傳效果</title>
          <meta http-equiv="content-Type" content="text/html;charset=gb2312">
          <!--把下面代碼加到<head>與</head>之間-->
          <style type="text/css">
          .fu_list 
          {
          width
          :600px;
          background
          :#ebebeb;
          font-size
          :12px;
          }

          .fu_list td 
          {
          padding
          :5px;
          line-height
          :20px;
          background-color
          :#fff;
          }

          .fu_list table 
          {
          width
          :100%;
          border
          :1px solid #ebebeb;
          }

          .fu_list thead td 
          {
          background-color
          :#f4f4f4;
          }

          .fu_list b 
          {
          font-size
          :14px;
          }

          /*file容器樣式*/
          a.files 
          {
          width
          :90px;
          height
          :30px;
          overflow
          :hidden;
          display
          :block;
          border
          :1px solid #BEBEBE;
          background
          :url("/Uploadfiles/20081027174618548.gif") left top no-repeat;
          text-decoration
          :none;
          }

          a.files:hover 
          {
          background-color
          :#FFFFEE;
          background-position
          :0 -30px;
          }

          /*file設為透明,并覆蓋整個觸發(fā)面*/
          a.files input 
          {
          margin-left
          :-350px;
          font-size
          :30px;
          cursor
          :pointer;
          filter
          :alpha(opacity=0);
          opacity
          :0;
          }

          /*取消點擊時的虛線框*/
          a.files, a.files input 
          {
          outline
          :none;/*ff*/
          hide-focus
          :expression(this.hideFocus=true);/*ie*/
          }

          </style>
          </head>
          <body>
          <!--把下面代碼加到<body>與</body>之間-->
          <form id="uploadForm" action="File.asp">
          <table border="0" cellspacing="1" class="fu_list">
          <thead>
          <tr>
          <td colspan="2"><b>上傳文件</b></td>
          </tr>
          </thead>
          <tbody>
          <tr>
          <td align="right" width="15%" style="line-height:35px;">添加文件:</td>
          <td><href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="http://www.zzsky.cn/effect/images/200810251555_loading.gif" /></td>
          </tr>
          <tr>
          <td colspan="2"><table border="0" cellspacing="0">
          <thead>
          <tr>
          <td>文件路徑</td>
          <td width="100"></td>
          </tr>
          </thead>
          <tbody id="idFileList">
          </tbody>
          </table></td>
          </tr>
          <tr>
          <td colspan="2" style="color:gray">溫馨提示:最多可同時上傳 <id="idLimit"></b> 個文件,只允許上傳 <id="idExt"></b> 文件。 </td>
          </tr>
          <tr>
          <td colspan="2" align="center" id="idMsg"><input type="button" value="開始上傳" id="idBtnupload" disabled="disabled" />
          <input type="button" value="全部取消" id="idBtndel" disabled="disabled" />
          </td>
          </tr>
          </tbody>
          </table>
          </form>
          <script type="text/javascript">
          var isIE = (document.all) ? true : false;
          var $ = function (id) {
          return "string" == typeof id ? document.getElementById(id) : id;
          }
          ;
          var Class = {
          create: 
          function() {
          return function() {
          this.initialize.apply(this, arguments);
          }

          }

          }

          var Extend = function(destination, source) {
          for (var property in source) {
          destination[property] 
          = source[property];
          }

          }

          var Bind = function(object, fun) {
          return function() {
          return fun.apply(object, arguments);
          }

          }

          var Each = function(list, fun){
          for (var i = 0, len = list.length; i < len; i++{ fun(list[i], i); }
          }
          ;
          //文件上傳類
          var FileUpload = Class.create();
          FileUpload.prototype 
          = {
          //表單對象,文件控件存放空間
          initialize: function(form, folder, options) {
          this.Form = $(form);//表單
          this.Folder = $(folder);//文件控件存放空間
          this.Files = [];//文件集合
          this.SetOptions(options);
          this.FileName = this.options.FileName;
          this._FrameName = this.options.FrameName;
          this.Limit = this.options.Limit;
          this.Distinct = !!this.options.Distinct;
          this.ExtIn = this.options.ExtIn;
          this.ExtOut = this.options.ExtOut;
          this.onIniFile = this.options.onIniFile;
          this.onEmpty = this.options.onEmpty;
          this.onNotExtIn = this.options.onNotExtIn;
          this.onExtOut = this.options.onExtOut;
          this.onLimite = this.options.onLimite;
          this.onSame = this.options.onSame;
          this.onFail = this.options.onFail;
          this.onIni = this.options.onIni;
          if(!this._FrameName){
          //為每個實例創(chuàng)建不同的iframe
          this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000);
          //ie不能修改iframe的name
          var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe");
          //為ff設置name
          oFrame.name = this._FrameName;
          oFrame.style.display 
          = "none";
          //在ie文檔未加載完用appendChild會報錯
          document.body.insertBefore(oFrame, document.body.childNodes[0]);
          }

          //設置form屬性,關鍵是target要指向iframe
          this.Form.target = this._FrameName;
          this.Form.method = "post";
          //注意ie的form沒有enctype屬性,要用encoding
          this.Form.encoding = "multipart/form-data";
          //整理一次
          this.Ini();
          }
          ,
          //設置默認屬性
          SetOptions: function(options) {
          this.options = {//默認值
          FileName:    "",//文件上傳控件的name,配合后臺使用
          FrameName:    "",//iframe的name,要自定義iframe的話這里設置name
          onIniFile:    function(){},//整理文件時執(zhí)行(其中參數(shù)是file對象)
          onEmpty:    function(){},//文件空值時執(zhí)行
          Limit:0,//文件數(shù)限制,0為不限制
          onLimite:    function(){},//超過文件數(shù)限制時執(zhí)行
          Distinct:    true,//是否不允許相同文件
          onSame:        function(){},//有相同文件時執(zhí)行
          ExtIn:        [],//允許后綴名
          onNotExtIn:    function(){},//不是允許后綴名時執(zhí)行
          ExtOut:        [],//禁止后綴名,當設置了ExtIn則ExtOut無效
          onExtOut:    function(){},//是禁止后綴名時執(zhí)行
          onFail:        function(){},//文件不通過檢測時執(zhí)行(其中參數(shù)是file對象)
          onIni:        function(){}//重置時執(zhí)行
          }
          ;
          Extend(
          this.options, options || {});
          }
          ,
          //整理空間
          Ini: function() {
          //整理文件集合
          this.Files = [];
          //整理文件空間,把有值的file放入文件集合
          Each(this.Folder.getElementsByTagName("input"), Bind(thisfunction(o){
          if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); }
          }
          ))
          //插入一個新的file
          var file = document.createElement("input");
          file.name 
          = this.FileName; file.type = "file"; file.onchange = Bind(thisfunction()this.Check(file); this.Ini(); });
          this.Folder.appendChild(file);
          //執(zhí)行附加程序
          this.onIni();
          }
          ,
          //檢測file對象
          Check: function(file) {
          //檢測變量
          var bCheck = true;
          //空值、文件數(shù)限制、后綴名、相同文件檢測
          if(!file.value){
          bCheck 
          = falsethis.onEmpty();
          }
           else if(this.Limit && this.Files.length >= this.Limit){
          bCheck 
          = falsethis.onLimite();
          }
           else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|"+ ")$""i").test(file.value)){
          //檢測是否允許后綴名
          bCheck = falsethis.onNotExtIn();
          }
           else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|"+ ")$""i").test(file.value)) {
          //檢測是否禁止后綴名
          bCheck = falsethis.onExtOut();
          }
           else if(!!this.Distinct) {
          Each(
          this.Files, function(o)if(o.value == file.value){ bCheck = false; } })
          if(!bCheck)this.onSame(); }
          }

          //沒有通過檢測
          !bCheck && this.onFail(file);
          }
          ,
          //刪除指定file
          Delete: function(file) {
          //移除指定file
          this.Folder.removeChild(file); this.Ini();
          }
          ,
          //刪除全部file
          Clear: function() {
          //清空文件空間
          Each(this.Files, Bind(thisfunction(o)this.Folder.removeChild(o); })); this.Ini();
          }

          }

          var fu = new FileUpload("uploadForm""idFile"{ Limit: 3, ExtIn: ["jpg""gif"],
          onIniFile: 
          function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); },
          onEmpty: 
          function(){ alert("請選擇一個文件"); },
          onLimite: 
          function(){ alert("超過上傳限制"); },
          onSame: 
          function(){ alert("已經有相同文件"); },
          onNotExtIn:    
          function(){ alert("只允許上傳" + this.ExtIn.join(""+ "文件"); },
          onFail: 
          function(file)this.Folder.removeChild(file); },
          onIni: 
          function(){
          //顯示文件列表
          var arrRows = [];
          if(this.Files.length){
          var oThis = this;
          Each(
          this.Files, function(o){
          var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);";
          a.onclick 
          = function(){ oThis.Delete(o); return false; };
          arrRows.push([o.value, a]);
          }
          );
          }
           else { arrRows.push(["<font color=’gray’>沒有添加文件</font>"" "]); }
          AddList(arrRows);
          //設置按鈕
          $("idBtnupload").disabled = $("idBtndel").disabled = this.Files.length <= 0;
          }

          }
          );
          $(
          "idBtnupload").onclick = function(){
          //顯示文件列表
          var arrRows = [];
          Each(fu.Files, 
          function(o){ arrRows.push([o.value, " "]); });
          AddList(arrRows);
          fu.Folder.style.display 
          = "none";
          $(
          "idProcess").style.display = "";
          $(
          "idMsg").innerHTML = "正在添加文件到您的網(wǎng)盤中,請稍候……<br />有可能因為網(wǎng)絡問題,出現(xiàn)程序長時間無響應,請點擊“<a href=’?’><font color=’red’>取消</font></a>”重新上傳文件";
          //fu.Form.submit();
          }

          //用來添加文件列表的函數(shù)
          function AddList(rows){
          //根據(jù)數(shù)組來添加列表
          var FileList = $("idFileList"), oFragment = document.createDocumentFragment();
          //用文檔碎片保存列表
          Each(rows, function(cells){
          var row = document.createElement("tr");
          Each(cells, 
          function(o){
          var cell = document.createElement("td");
          if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); }
          row.appendChild(cell);
          }
          );
          oFragment.appendChild(row);
          }
          )
          //ie的table不支持innerHTML所以這樣清空table
          while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); }
          FileList.appendChild(oFragment);
          }

          $(
          "idLimit").innerHTML = fu.Limit;
          $(
          "idExt").innerHTML = fu.ExtIn.join("");
          $(
          "idBtndel").onclick = function(){ fu.Clear(); }
          //在后臺通過window.parent來訪問主頁面的函數(shù)
          function Finish(msg){ alert(msg); location.href = location.href; }
          </script>
          </body>
          </html>
          posted on 2008-12-07 23:08 CopyHoo 閱讀(202) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 衡山县| 北票市| 缙云县| 崇礼县| 绥中县| 柳林县| 成武县| 龙南县| 丰顺县| 榆中县| 大洼县| 盘山县| 南宫市| 洞头县| 阿鲁科尔沁旗| 眉山市| 柘城县| 平原县| 静乐县| 大城县| 台南县| 米脂县| 莱阳市| 开鲁县| 襄城县| 长治县| 南阳市| 马公市| 建昌县| 马山县| 阿克陶县| 江孜县| 九龙城区| 福清市| 临沭县| 永德县| 托克逊县| 惠州市| 巴东县| 南安市| 兰西县|