亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

AjaxUpLoad.js實現文件上傳

2024-09-01 08:33:57
字體:
來源:轉載
供稿:網友

AjaxUpload.js文件的代碼,供大家參考,具體內容如下

/**  * AJAX Upload ( http://valums.com/ajax-upload/ )  * Copyright (c) Andris Valums  * Licensed under the MIT license ( http://valums.com/mit-license/ )  * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions  */ (function () {  /* global window */  /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */   /**   * Wrapper for FireBug's console.log   */   function log() {   if (typeof(console) != 'undefined' && typeof(console.log) == 'function') {    Array.prototype.unshift.call(arguments, '[Ajax Upload]');    console.log(Array.prototype.join.call(arguments, ' '));   }  }   /**   * Attaches event to a dom element.   * @param {Element} el   * @param type event name   * @param fn callback This refers to the passed element   */   function addEvent(el, type, fn) {   if (el.addEventListener) {    el.addEventListener(type, fn, false);   } else if (el.attachEvent) {    el.attachEvent('on' + type, function () {     fn.call(el);    });   } else {    throw new Error('not supported or DOM not loaded');   }  }   /**   * Attaches resize event to a window, limiting   * number of event fired. Fires only when encounteres   * delay of 100 after series of events.   *   * Some browsers fire event multiple times when resizing   * http://www.quirksmode.org/dom/events/resize.html   *   * @param fn callback This refers to the passed element   */   function addResizeEvent(fn) {   var timeout;    addEvent(window, 'resize', function () {    if (timeout) {     clearTimeout(timeout);    }    timeout = setTimeout(fn, 100);   });  }   // Needs more testing, will be rewriten for next version    // getOffset function copied from jQuery lib (http://jquery.com/)  if (document.documentElement.getBoundingClientRect) {   // Get Offset using getBoundingClientRect   // http://ejohn.org/blog/getboundingclientrect-is-awesome/   var getOffset = function (el) {    var box = el.getBoundingClientRect();    var doc = el.ownerDocument;    var body = doc.body;    var docElem = doc.documentElement; // for ie    var clientTop = docElem.clientTop || body.clientTop || 0;    var clientLeft = docElem.clientLeft || body.clientLeft || 0;     // In Internet Explorer 7 getBoundingClientRect property is treated as physical,    // while others are logical. Make all logical, like in IE8.    var zoom = 1;    if (body.getBoundingClientRect) {     var bound = body.getBoundingClientRect();     zoom = (bound.right - bound.left) / body.clientWidth;    }     if (zoom > 1) {     clientTop = 0;     clientLeft = 0;    }     var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop,     left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;     return {     top: top,     left: left    };   };  } else {   // Get offset adding all offsets   var getOffset = function (el) {    var top = 0,     left = 0;    do {     top += el.offsetTop || 0;     left += el.offsetLeft || 0;     el = el.offsetParent;    } while (el);     return {     left: left,     top: top    };   };  }   /**   * Returns left, top, right and bottom properties describing the border-box,   * in pixels, with the top-left relative to the body   * @param {Element} el   * @return {Object} Contains left, top, right,bottom   */   function getBox(el) {   var left, right, top, bottom;   var offset = getOffset(el);   left = offset.left;   top = offset.top;    right = left + el.offsetWidth;   bottom = top + el.offsetHeight;    return {    left: left,    right: right,    top: top,    bottom: bottom   };  }   /**   * Helper that takes object literal   * and add all properties to element.style   * @param {Element} el   * @param {Object} styles   */   function addStyles(el, styles) {   for (var name in styles) {    if (styles.hasOwnProperty(name)) {     el.style[name] = styles[name];    }   }  }   /**   * Function places an absolutely positioned   * element on top of the specified element   * copying position and dimentions.   * @param {Element} from   * @param {Element} to   */   function copyLayout(from, to) {   var box = getBox(from);    addStyles(to, {    position: 'absolute',    left: box.left + 'px',    top: box.top + 'px',    width: from.offsetWidth + 'px',    height: from.offsetHeight + 'px'   });  }   /**   * Creates and returns element from html chunk   * Uses innerHTML to create an element   */  var toElement = (function () {   var div = document.createElement('div');   return function (html) {    div.innerHTML = html;    var el = div.firstChild;    return div.removeChild(el);   };  })();   /**   * Function generates unique id   * @return unique id   */  var getUID = (function () {   var id = 0;   return function () {    return 'ValumsAjaxUpload' + id++;   };  })();   /**   * Get file name from path   * @param {String} file path to file   * @return filename   */   function fileFromPath(file) {   return file.replace(/.*(//|//)/, "");  }   /**   * Get file extension lowercase   * @param {String} file name   * @return file extenstion   */   function getExt(file) {   return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';  }   function hasClass(el, name) {   var re = new RegExp('//b' + name + '//b');   return re.test(el.className);  }   function addClass(el, name) {   if (!hasClass(el, name)) {    el.className += ' ' + name;   }  }   function removeClass(el, name) {   var re = new RegExp('//b' + name + '//b');   el.className = el.className.replace(re, '');  }   function removeNode(el) {   el.parentNode.removeChild(el);  }   /**   * Easy styling and uploading   * @constructor   * @param button An element you want convert to   * upload button. Tested dimentions up to 500x500px   * @param {Object} options See defaults below.   */  window.AjaxUpload = function (button, options) {   this._settings = {    // Location of the server-side upload script    action: 'upload.php',    // File upload name    name: 'userfile',    // Additional data to send    data: {},    // Submit file as soon as it's selected    autoSubmit: true,    // The type of data that you're expecting back from the server.    // html and xml are detected automatically.    // Only useful when you are using json data as a response.    // Set to "json" in that case.    responseType: false,    // Class applied to button when mouse is hovered    hoverClass: 'hover',    // Class applied to button when AU is disabled    disabledClass: 'disabled',    // When user selects a file, useful with autoSubmit disabled    // You can return false to cancel upload       onChange: function (file, extension) {},    // Callback to fire before file is uploaded    // You can return false to cancel upload    onSubmit: function (file, extension) {},    // Fired when file upload is completed    // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!    onComplete: function (file, response) {}   };    // Merge the users options with our defaults   for (var i in options) {    if (options.hasOwnProperty(i)) {     this._settings[i] = options[i];    }   }    // button isn't necessary a dom element   if (button.jquery) {    // jQuery object was passed    button = button[0];   } else if (typeof button == "string") {    if (/^#.*/.test(button)) {     // If jQuery user passes #elementId don't break it         button = button.slice(1);    }     button = document.getElementById(button);   }    if (!button || button.nodeType !== 1) {    throw new Error("Please make sure that you're passing a valid element");   }    if (button.nodeName.toUpperCase() == 'A') {    // disable link          addEvent(button, 'click', function (e) {     if (e && e.preventDefault) {      e.preventDefault();     } else if (window.event) {      window.event.returnValue = false;     }    });   }    // DOM element   this._button = button;   // DOM element       this._input = null;   // If disabled clicking on button won't do anything   this._disabled = false;    // if the button was disabled before refresh if will remain   // disabled in FireFox, let's fix it   this.enable();    this._rerouteClicks();  };   // assigning methods to our class  AjaxUpload.prototype = {   setData: function (data) {    this._settings.data = data;   },   disable: function () {    addClass(this._button, this._settings.disabledClass);    this._disabled = true;     var nodeName = this._button.nodeName.toUpperCase();    if (nodeName == 'INPUT' || nodeName == 'BUTTON') {     this._button.setAttribute('disabled', 'disabled');    }     // hide input    if (this._input) {     // We use visibility instead of display to fix problem with Safari 4     // The problem is that the value of input doesn't change if it     // has display none when user selects a file        this._input.parentNode.style.visibility = 'hidden';    }   },   enable: function () {    removeClass(this._button, this._settings.disabledClass);    this._button.removeAttribute('disabled');    this._disabled = false;    },   /**    * Creates invisible file input    * that will hover above the button    * <div><input type='file' /></div>    */   _createInput: function () {    var self = this;     var input = document.createElement("input");    input.setAttribute('type', 'file');    input.setAttribute('name', this._settings.name);     addStyles(input, {     'position': 'absolute',     // in Opera only 'browse' button     // is clickable and it is located at     // the right side of the input     'right': 0,     'margin': 0,     'padding': 0,     'fontSize': '480px',     'cursor': 'pointer'    });     var div = document.createElement("div");    addStyles(div, {     'display': 'block',     'position': 'absolute',     'overflow': 'hidden',     'margin': 0,     'padding': 0,     'opacity': 0,     // Make sure browse button is in the right side     // in Internet Explorer     'direction': 'ltr',     //Max zIndex supported by Opera 9.0-9.2     'zIndex': 2147483583    });     // Make sure that element opacity exists.    // Otherwise use IE filter       if (div.style.opacity !== "0") {     if (typeof(div.filters) == 'undefined') {      throw new Error('Opacity not supported by the browser');     }     div.style.filter = "alpha(opacity=0)";    }     addEvent(input, 'change', function () {      if (!input || input.value === '') {      return;     }      // Get filename from input, required         // as some browsers have path instead of it       var file = fileFromPath(input.value);      if (false === self._settings.onChange.call(self, file, getExt(file))) {      self._clearInput();      return;     }      // Submit form when value is changed     if (self._settings.autoSubmit) {      self.submit();     }    });     addEvent(input, 'mouseover', function () {     addClass(self._button, self._settings.hoverClass);    });     addEvent(input, 'mouseout', function () {     removeClass(self._button, self._settings.hoverClass);      // We use visibility instead of display to fix problem with Safari 4     // The problem is that the value of input doesn't change if it     // has display none when user selects a file        input.parentNode.style.visibility = 'hidden';     });     div.appendChild(input);    document.body.appendChild(div);     this._input = input;   },   _clearInput: function () {    if (!this._input) {     return;    }     // this._input.value = ''; Doesn't work in IE6            removeNode(this._input.parentNode);    this._input = null;    this._createInput();     removeClass(this._button, this._settings.hoverClass);   },   /**    * Function makes sure that when user clicks upload button,    * the this._input is clicked instead    */   _rerouteClicks: function () {    var self = this;     // IE will later display 'access denied' error    // if you use using self._input.click()    // other browsers just ignore click()     addEvent(self._button, 'mouseover', function () {     if (self._disabled) {      return;     }      if (!self._input) {      self._createInput();     }      var div = self._input.parentNode;     copyLayout(self._button, div);     div.style.visibility = 'visible';     });      // commented because we now hide input on mouseleave    /**     * When the window is resized the elements     * can be misaligned if button position depends     * on window size     */    //addResizeEvent(function(){    // if (self._input){    //  copyLayout(self._button, self._input.parentNode);    // }    //});       },   /**    * Creates iframe with unique name    * @return {Element} iframe    */   _createIframe: function () {    // We can't use getTime, because it sometimes return    // same value in safari :(    var id = getUID();     // We can't use following code as the name attribute    // won't be properly registered in IE6, and new window    // on form submit will open    // var iframe = document.createElement('iframe');    // iframe.setAttribute('name', id);           var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');    // src="javascript:false; was added    // because it possibly removes ie6 prompt    // "This page contains both secure and nonsecure items"    // Anyway, it doesn't do any harm.       iframe.setAttribute('id', id);     iframe.style.display = 'none';    document.body.appendChild(iframe);     return iframe;   },   /**    * Creates form, that will be submitted to iframe    * @param {Element} iframe Where to submit    * @return {Element} form    */   _createForm: function (iframe) {    var settings = this._settings;     // We can't use the following code in IE6    // var form = document.createElement('form');    // form.setAttribute('method', 'post');    // form.setAttribute('enctype', 'multipart/form-data');    // Because in this case file won't be attached to request         var form = toElement('<form method="post" enctype="multipart/form-data"></form>');     form.setAttribute('action', settings.action);    form.setAttribute('target', iframe.name);    form.style.display = 'none';    document.body.appendChild(form);     // Create hidden input element for each data key    for (var prop in settings.data) {     if (settings.data.hasOwnProperty(prop)) {      var el = document.createElement("input");      el.setAttribute('type', 'hidden');      el.setAttribute('name', prop);      el.setAttribute('value', settings.data[prop]);      form.appendChild(el);     }    }    return form;   },   /**    * Gets response from iframe and fires onComplete event when ready    * @param iframe    * @param file Filename to use in onComplete callback    */   _getResponse: function (iframe, file) {    // getting response    var toDeleteFlag = false,     self = this,     settings = this._settings;     addEvent(iframe, 'load', function () {      if ( // For Safari     iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||     // For FF, IE     iframe.src == "javascript:'<html></html>';") {      // First time around, do not delete.      // We reload to blank page, so that reloading main page      // does not re-submit the post.       if (toDeleteFlag) {       // Fix busy state in FF3       setTimeout(function () {        removeNode(iframe);       },       0);      }       return;     }      var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;      // fixing Opera 9.26,10.00     if (doc.readyState && doc.readyState != 'complete') {      // Opera fires load event multiple times      // Even when the DOM is not ready yet      // this fix should not affect other browsers      return;     }      // fixing Opera 9.64     if (doc.body && doc.body.innerHTML == "false") {      // In Opera 9.64 event was fired second time      // when body.innerHTML changed from false      // to server response approx. after 1 sec      return;     }      var response;      if (doc.XMLDocument) {      // response is a xml document Internet Explorer property      response = doc.XMLDocument;     } else if (doc.body) {      // response is html document or plain text      response = doc.body.innerHTML;       if (settings.responseType && settings.responseType.toLowerCase() == 'json') {       // If the document was sent as 'application/javascript' or       // 'text/javascript', then the browser wraps the text in a <pre>       // tag and performs html encoding on the contents. In this case,       // we need to pull the original text content from the text node's       // nodeValue property to retrieve the unmangled content.       // Note that IE6 only understands text/html       if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {        response = doc.body.firstChild.firstChild.nodeValue;       }        if (response) {        response = eval("(" + response + ")");       } else {        response = {};       }      }     } else {      // response is a xml document      response = doc;     }      settings.onComplete.call(self, file, response);      // Reload blank page, so that reloading main page     // does not re-submit the post. Also, remember to     // delete the frame     toDeleteFlag = true;      // Fix IE mixed content issue     iframe.src = "javascript:'<html></html>';";    });   },   /**    * Upload file contained in this._input    */   submit: function () {    var self = this,     settings = this._settings;     if (!this._input || this._input.value === '') {     return;    }     var file = fileFromPath(this._input.value);     // user returned false to cancel upload    if (false === settings.onSubmit.call(this, file, getExt(file))) {     this._clearInput();     return;    }     // sending request     var iframe = this._createIframe();    var form = this._createForm(iframe);     // assuming following structure    // div -> input type='file'    removeNode(this._input.parentNode);    removeClass(self._button, self._settings.hoverClass);     form.appendChild(this._input);     form.submit();     // request set, clean up        removeNode(form);    form = null;    removeNode(this._input);    this._input = null;     // Get response from iframe and fire onComplete event when ready    this._getResponse(iframe, file);     // get ready for next request       this._createInput();   }  }; })(); 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频精品视频| 国产精品大片wwwwww| 欧美一级免费视频| 国产综合视频在线观看| 亚洲国产小视频在线观看| 欧美性极品xxxx做受| 亚洲成人精品在线| 成人97在线观看视频| 欧美日韩国内自拍| 久久精彩免费视频| 国产精品视频大全| 国产成人a亚洲精品| 亚洲区免费影片| 亚洲精品久久7777777| 91国产一区在线| 影音先锋日韩有码| 日韩中文字幕免费看| 国产成人小视频在线观看| 日韩欧美国产激情| 国产欧美日韩精品专区| 91久久国产综合久久91精品网站| 日韩日本欧美亚洲| 亚洲美女福利视频网站| 久久精品国产久精国产一老狼| 亚洲高清久久久久久| 亚洲毛片在线观看.| 欧美日韩国产成人高清视频| 国产成人精品久久二区二区91| 黑人巨大精品欧美一区免费视频| 91av免费观看91av精品在线| 中文字幕日韩免费视频| 国产欧美一区二区三区久久人妖| 欧美色另类天堂2015| 国产精品夜色7777狼人| 亚洲精品乱码久久久久久按摩观| 日韩视频一区在线| 国产精品扒开腿做爽爽爽视频| 日产精品久久久一区二区福利| 亚洲综合色av| 欧美大片va欧美在线播放| 亚洲国产精品久久久久秋霞不卡| 欧美激情在线狂野欧美精品| 国产xxx69麻豆国语对白| 精品国产电影一区| 日韩免费在线视频| 欧美日韩国产一中文字不卡| 亚洲 日韩 国产第一| 亚洲一区二区久久久久久久| 欧美午夜片在线免费观看| 久久精品成人动漫| 亚洲日韩中文字幕在线播放| 欧美一区视频在线| 国产精品视频久久| 国产精品高潮呻吟久久av黑人| 亚洲精品自产拍| 国内精品久久久久影院 日本资源| 韩国精品久久久999| 青青精品视频播放| 欧美刺激性大交免费视频| 久久久久久久一区二区三区| 日韩精品免费综合视频在线播放| 欧美日韩不卡合集视频| 久久免费国产视频| 精品福利樱桃av导航| 国内精久久久久久久久久人| 成人免费淫片aa视频免费| 欧美极品少妇与黑人| 亚洲欧洲国产精品| 亚洲高清久久久久久| 成人疯狂猛交xxx| 久久久精品免费视频| 国产精品久久久久久久久久久久久| 91久热免费在线视频| 在线丨暗呦小u女国产精品| 日韩经典第一页| 国产综合福利在线| 在线观看日韩视频| 久久精品91久久香蕉加勒比| 成人做爰www免费看视频网站| 亚洲bt欧美bt日本bt| 欧美福利视频网站| 91精品久久久久久久久久另类| 亚洲国产三级网| 欧美在线xxx| 国产精品一区二区av影院萌芽| 日韩资源在线观看| 国产精品日韩在线| 国内免费久久久久久久久久久| 久久久久久久久久久久久久久久久久av| 中文字幕日韩欧美| 欧美国产日产韩国视频| 久久全国免费视频| 久久99亚洲热视| 一区二区三区视频在线| 日韩三级影视基地| 国产做受高潮69| 91精品综合视频| 热门国产精品亚洲第一区在线| 性色av一区二区三区在线观看| 一区二区在线视频| 亚洲第一免费网站| 亚洲国产小视频在线观看| 亚洲欧美日韩久久久久久| 久久精品成人动漫| 日本韩国在线不卡| 欧美午夜电影在线| 亚洲国产成人久久综合一区| 日日狠狠久久偷偷四色综合免费| 国内精品久久久久久| 亚洲国产小视频| 欧美综合在线第二页| 欧美肥老妇视频| 国产亚洲精品一区二555| 亚洲白虎美女被爆操| 国产精品一区二区性色av| 成人黄色短视频在线观看| 久久久久久久电影一区| 欧美伊久线香蕉线新在线| 精品久久久久久国产| 亚洲国产古装精品网站| 亚洲精品动漫100p| 亚洲欧美日韩网| 色综合久久88色综合天天看泰| 国产美女精彩久久| 国产精品电影网站| 国产精品丝袜久久久久久高清| 欧美xxxx14xxxxx性爽| 欧美一区二三区| 欧美高清视频在线| 国产一区私人高清影院| 久久6精品影院| 精品久久久一区| 亚州精品天堂中文字幕| 亚洲日韩中文字幕在线播放| 色偷偷av一区二区三区| 精品女同一区二区三区在线播放| 国产精品视频久久| 丰满岳妇乱一区二区三区| 欧美日韩国产色| 日韩欧美亚洲综合| 亚洲女在线观看| 日韩中文字幕精品| 最近2019好看的中文字幕免费| 亚洲人av在线影院| 日韩成人激情影院| 青草成人免费视频| 欧美综合一区第一页| 自拍偷拍亚洲一区| 欧美午夜精品久久久久久人妖| 久久久久久国产精品| 久久香蕉国产线看观看网| 欧美高清在线视频观看不卡| 北条麻妃一区二区三区中文字幕| 欧美性猛交xxxx偷拍洗澡| 91欧美日韩一区| 国产精品成人一区| 久久久久久国产精品| 综合136福利视频在线| 久久久久久久91| 欧美二区乱c黑人| 亚洲欧美成人一区二区在线电影| 日韩成人av在线| 91地址最新发布| 美女福利精品视频|