123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- (function(scope, $){
- var simpleUpload = [],
- simpleUploadCount = 0;
- $.fn.simpleUpload = function(options){
- var def = {
- url : null,
- change : null,
- error : null,
- types : null,
- fields : null,
- size : 5120
- };
- return this.each(function(){
- var $this = $(this),
- id = ++simpleUploadCount;
- $this.data('simpleUpload', id);
- options = options || {};
- $.each( $this.data(), function(name, value){
- if('simpleUpload' == name) return;
- options[name] = (typeof window[value] == 'function')? window[value] : value;
- });
- var params = $.extend({}, def, options);
- if(typeof params.change == 'function') $this.change(function(){
- params.change($this[0].files);
- });
- if(params.trigger){
- if(params.trigger instanceof jQuery){
- params.trigger.click(send);
- }else{
- $(document).on('click', params.trigger, send);
- }
- }else{
- $this.change(send);
- }
- simpleUpload[id] = params;
- function send(event){
- event.preventDefault();
- $this.simpleUploadSend();
- }
- });
- };
- $.fn.simpleUploadSend = function(fields){
- return this.each(function(){
- var $this = $(this),
- id = $this.data('simpleUpload'),
- name = $this.attr('name'),
- data = new FormData();
- params = simpleUpload[id];
- for(var i in $this[0].files){
- if(typeof $this[0].files[i] == 'object'){
- var file = $this[0].files[i];
- if(!$.typeCheck(file.name, params.types)){
- if(typeof params.error == 'function') params.error({ type: 'fileType' });
- return false;
- }
- if((file.size/params.size) > params.size){
- if(typeof params.error == 'function') params.error({ type:'size' });
- return false;
- }
- if(i == 0){
- data.append(name, file);
- }else {
- data.append(name+''+parseInt(i), file);
- }
-
- }
- }
- if(typeof params.fields == 'object'){
- for( i in params.fields){
- if($.isArray(params.fields[i])){
- for(var k in params.fields[i]) data.append(i+'['+k+']', params.fields[i][k]);
- }else{
- data.append(i, params.fields[i]);
- }
- }
- }
-
- var ajax = {
- url : params.url,
- data : data,
- cache : false,
- contentType : false,
- processData : false,
- type : 'POST',
- complete: function(){
- $this.val('');
- if(params.complete) params.complete(arguments);
- }
- };
- if(params.error != null ) ajax.error = params.error;
- if(params.success) ajax.success = params.success;
- if(params.async) ajax.async = params.async;
- if(params.beforeSend) ajax.beforeSend = params.beforeSend;
- if(params.global) ajax.global = params.global;
- if(params.dataType) ajax.dataType = params.dataType;
- if(params.contents) ajax.contents = params.contents;
- if(params.jsonp) ajax.jsonp = params.jsonp;
- if(params.jsonpCallback) ajax.jsonpCallback = params.jsonpCallback;
- if(params.password) ajax.password = params.password;
- if(params.username) ajax.username = params.username;
- if(params.statusCode) ajax.statusCode = params.statusCode;
- $.ajax(ajax);
- });
- };
- $.extend(true, {
- typeCheck: function(name, types){
- if($.isArray(types)){
- if(types.indexOf($.getExt(name)) > -1) return true;
- return false;
- }
- return true;
- },
- getExt: function(name){
- return name.substr(name.lastIndexOf(".") + 1);
- }
- });
- })(window, window.jQuery);
|