亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jquery.form.js

?? jquery的多附件上傳插件
?? JS
?? 第 1 頁 / 共 2 頁
字號:
/*
 * jQuery Form Plugin
 * version: 2.18 (06-JAN-2009)
 * @requires jQuery v1.2.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.form.js 16 2009-04-08 11:20:56Z diego.alto $
 */
;(function($) {

/*
    Usage Note:  
    -----------
    Do not use both ajaxSubmit and ajaxForm on the same form.  These
    functions are intended to be exclusive.  Use ajaxSubmit if you want
    to bind your own submit handler to the form.  For example,

    $(document).ready(function() {
        $('#myForm').bind('submit', function() {
            $(this).ajaxSubmit({
                target: '#output'
            });
            return false; // <-- important!
        });
    });

    Use ajaxForm when you want the plugin to manage all the event binding
    for you.  For example,

    $(document).ready(function() {
        $('#myForm').ajaxForm({
            target: '#output'
        });
    });
        
    When using ajaxForm, the ajaxSubmit function will be invoked for you
    at the appropriate time.  
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting 
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
    if (!this.length) {
        log('ajaxSubmit: skipping submit process - no element selected');
        return this;
    }

    if (typeof options == 'function')
        options = { success: options };

    options = $.extend({
        url:  this.attr('action') || window.location.toString(),
        type: this.attr('method') || 'GET'
    }, options || {});

    // hook for manipulating the form data before it is extracted;
    // convenient for use with rich editors like tinyMCE or FCKEditor
    var veto = {};
    this.trigger('form-pre-serialize', [this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
        return this;
    }

    // provide opportunity to alter form data before it is serialized
    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSerialize callback');
        return this;
    }    
   
    var a = this.formToArray(options.semantic);
    if (options.data) {
        options.extraData = options.data;
        for (var n in options.data) {
          if(options.data[n] instanceof Array) {
            for (var k in options.data[n])
              a.push( { name: n, value: options.data[n][k] } )
          }  
          else
             a.push( { name: n, value: options.data[n] } );
        }
    }

    // give pre-submit callback an opportunity to abort the submit
    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
        log('ajaxSubmit: submit aborted via beforeSubmit callback');
        return this;
    }    

    // fire vetoable 'validate' event
    this.trigger('form-submit-validate', [a, this, options, veto]);
    if (veto.veto) {
        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
        return this;
    }    

    var q = $.param(a);

    if (options.type.toUpperCase() == 'GET') {
        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
        options.data = null;  // data is null for 'get'
    }
    else
        options.data = q; // data is the query string for 'post'

    var $form = this, callbacks = [];
    if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
    if (options.clearForm) callbacks.push(function() { $form.clearForm(); });

    // perform a load on the target only if dataType is not provided
    if (!options.dataType && options.target) {
        var oldSuccess = options.success || function(){};
        callbacks.push(function(data) {
            $(options.target).html(data).each(oldSuccess, arguments);
        });
    }
    else if (options.success)
        callbacks.push(options.success);

    options.success = function(data, status) {
        for (var i=0, max=callbacks.length; i < max; i++)
            callbacks[i].apply(options, [data, status, $form]);
    };

    // are there files to upload?
    var files = $('input:file', this).fieldValue();
    var found = false;
    for (var j=0; j < files.length; j++)
        if (files[j])
            found = true;

    // options.iframe allows user to force iframe mode
   if (options.iframe || found) { 
       // hack to fix Safari hang (thanks to Tim Molendijk for this)
       // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
       if ($.browser.safari && options.closeKeepAlive)
           $.get(options.closeKeepAlive, fileUpload);
       else
           fileUpload();
       }
   else
       $.ajax(options);

    // fire 'notify' event
    this.trigger('form-submit-notify', [this, options]);
    return this;


    // private function for handling file uploads (hat tip to YAHOO!)
    function fileUpload() {
        var form = $form[0];
        
        if ($(':input[name=submit]', form).length) {
            alert('Error: Form elements must not be named "submit".');
            return;
        }
        
        var opts = $.extend({}, $.ajaxSettings, options);
		var s = jQuery.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);

        var id = 'jqFormIO' + (new Date().getTime());
        var $io = $('<iframe id="' + id + '" name="' + id + '" />');
        var io = $io[0];

        if ($.browser.msie || $.browser.opera) 
            io.src = 'javascript:false;document.write("");';
        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });

        var xhr = { // mock object
            aborted: 0,
            responseText: null,
            responseXML: null,
            status: 0,
            statusText: 'n/a',
            getAllResponseHeaders: function() {},
            getResponseHeader: function() {},
            setRequestHeader: function() {},
            abort: function() { 
                this.aborted = 1; 
                $io.attr('src','about:blank'); // abort op in progress
            }
        };

        var g = opts.global;
        // trigger ajax global events so that activity/block indicators work like normal
        if (g && ! $.active++) $.event.trigger("ajaxStart");
        if (g) $.event.trigger("ajaxSend", [xhr, opts]);

		if (s.beforeSend && s.beforeSend(xhr, s) === false) {
			s.global && jQuery.active--;
			return;
        }
        if (xhr.aborted)
            return;
        
        var cbInvoked = 0;
        var timedOut = 0;

        // add submitting element to data if we know it
        var sub = form.clk;
        if (sub) {
            var n = sub.name;
            if (n && !sub.disabled) {
                options.extraData = options.extraData || {};
                options.extraData[n] = sub.value;
                if (sub.type == "image") {
                    options.extraData[name+'.x'] = form.clk_x;
                    options.extraData[name+'.y'] = form.clk_y;
                }
            }
        }

        // take a breath so that pending repaints get some cpu time before the upload starts
        setTimeout(function() {
            // make sure form attrs are set
            var t = $form.attr('target'), a = $form.attr('action');
            $form.attr({
                target:   id,
                method:   'POST',
                action:   opts.url
            });
            
            // ie borks in some cases when setting encoding
            if (! options.skipEncodingOverride) {
                $form.attr({
                    encoding: 'multipart/form-data',
                    enctype:  'multipart/form-data'
                });
            }

            // support timout
            if (opts.timeout)
                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);

            // add "extra" data to form if provided in options
            var extraInputs = [];
            try {
                if (options.extraData)
                    for (var n in options.extraData)
                        extraInputs.push(
                            $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
                                .appendTo(form)[0]);
            
                // add iframe to doc and submit the form
                $io.appendTo('body');
                io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
                form.submit();
            }
            finally {
                // reset attrs and remove "extra" input elements
                $form.attr('action', a);
                t ? $form.attr('target', t) : $form.removeAttr('target');
                $(extraInputs).remove();
            }
        }, 10);

        function cb() {
            if (cbInvoked++) return;
            
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

            var operaHack = 0;
            var ok = true;
            try {
                if (timedOut) throw 'timeout';
                // extract the server response from the iframe
                var data, doc;

                doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
                
                if (doc.body == null && !operaHack && $.browser.opera) {
                    // In Opera 9.2.x the iframe DOM is not always traversable when
                    // the onload callback fires so we give Opera 100ms to right itself
                    operaHack = 1;
                    cbInvoked--;
                    setTimeout(cb, 100);
                    return;
                }
                
                xhr.responseText = doc.body ? doc.body.innerHTML : null;
                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
                xhr.getResponseHeader = function(header){
                    var headers = {'content-type': opts.dataType};
                    return headers[header];
                };

                if (opts.dataType == 'json' || opts.dataType == 'script') {
                    var ta = doc.getElementsByTagName('textarea')[0];
                    xhr.responseText = ta ? ta.value : xhr.responseText;
                }
                else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
                    xhr.responseXML = toXml(xhr.responseText);
                }
                data = $.httpData(xhr, opts.dataType);
            }
            catch(e){
                ok = false;
                $.handleError(opts, xhr, 'error', e);
            }

            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
            if (ok) {
                opts.success(data, 'success');
                if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
            }
            if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
            if (g && ! --$.active) $.event.trigger("ajaxStop");
            if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');

            // clean up

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩激情在线观看| 国产精品视频一二| 色婷婷综合中文久久一本| 国产精品一区在线| 国产一区二三区| 国产一区美女在线| 国产福利91精品一区| 国产一区二区三区综合| 国产精品亚洲第一| 处破女av一区二区| 99久久伊人精品| 国产一区二区三区在线观看精品 | 亚洲精品一线二线三线| 欧美一区二区三区在线看| 日韩一区二区电影| 久久理论电影网| 国产精品少妇自拍| 亚洲免费av高清| 日韩av中文字幕一区二区三区| 免费国产亚洲视频| 国产麻豆一精品一av一免费| 成人sese在线| 色94色欧美sute亚洲线路一久| 日本高清无吗v一区| 欧美日本一区二区三区四区| 欧美一区二区三区在| 久久九九国产精品| 亚洲品质自拍视频网站| 婷婷综合另类小说色区| 精品在线免费视频| 91网站最新地址| 欧美精品三级在线观看| 国产亚洲va综合人人澡精品 | 亚洲国产婷婷综合在线精品| 免费的国产精品| 成人国产精品免费网站| 欧美探花视频资源| 精品女同一区二区| 亚洲精品午夜久久久| 免费视频一区二区| 在线视频中文字幕一区二区| 日韩欧美的一区| 亚洲精品美腿丝袜| 国产在线精品一区二区不卡了| eeuss国产一区二区三区| 欧美不卡一二三| 国产精品福利av | 制服.丝袜.亚洲.中文.综合| 欧美激情综合网| 奇米色777欧美一区二区| 97久久人人超碰| 久久一二三国产| 欧美96一区二区免费视频| 99精品视频一区二区三区| 亚洲精品一区二区三区四区高清| 亚洲国产精品久久不卡毛片| 国产盗摄一区二区| 日韩欧美国产一二三区| 亚洲成人手机在线| 色综合中文字幕国产 | 欧美一区二区三区四区视频| 国产精品久久久99| 国产精品综合二区| 日韩欧美一卡二卡| 日韩av一区二区在线影视| 欧美中文字幕亚洲一区二区va在线| 国产精品欧美一区二区三区| 激情av综合网| 2024国产精品视频| 精品一区中文字幕| 日韩一二三区不卡| 日本不卡的三区四区五区| 欧美色大人视频| 亚洲国产wwwccc36天堂| 色偷偷久久人人79超碰人人澡| 国产精品美女久久久久久久久| 国产成人午夜片在线观看高清观看| 日韩免费观看2025年上映的电影| 日韩不卡一区二区三区| 日韩精品一区在线| 久久精品99久久久| 久久久无码精品亚洲日韩按摩| 麻豆精品视频在线| 久久综合狠狠综合| 国产精品一区二区果冻传媒| 国产婷婷色一区二区三区在线| 国产成人日日夜夜| 国产精品精品国产色婷婷| www.欧美日韩国产在线| 亚洲精品乱码久久久久久久久| 色先锋久久av资源部| 亚洲成人tv网| 精品国产一二三区| 成人福利在线看| 亚洲综合视频网| 日韩欧美在线观看一区二区三区| 国产一区美女在线| 国产精品久久久久国产精品日日| 91老司机福利 在线| 午夜成人免费视频| 91精品国产91久久久久久一区二区 | 欧美精品久久天天躁| 久久精品国产秦先生| 国产精品乱码妇女bbbb| 91福利在线观看| 成人午夜短视频| 亚洲精品一二三| 欧美一级片免费看| 不卡的av网站| 日本午夜精品一区二区三区电影| 久久亚洲捆绑美女| 日本高清成人免费播放| 久久99国产乱子伦精品免费| 亚洲桃色在线一区| 欧美亚洲一区二区在线观看| 精品伊人久久久久7777人| 一区二区三区在线播| 日韩三区在线观看| 一本一道久久a久久精品 | 国产亚洲欧美激情| 91国内精品野花午夜精品 | 欧美激情在线一区二区| 欧美视频在线播放| 成人免费视频免费观看| 天天做天天摸天天爽国产一区| 国产精品欧美精品| 欧美tk—视频vk| 欧美日韩视频在线第一区| 成人黄色网址在线观看| 久久不见久久见免费视频7| 亚洲成人免费视频| **欧美大码日韩| 久久一区二区三区国产精品| 欧美久久久一区| 欧洲在线/亚洲| 成人精品小蝌蚪| 国产乱人伦偷精品视频不卡| 日日夜夜免费精品| 亚洲图片欧美视频| 亚洲美女少妇撒尿| 国产精品久99| 国产精品久99| 国产精品麻豆欧美日韩ww| 久久久久久久一区| 久久免费视频色| 久久亚洲一级片| 久久免费看少妇高潮| 精品成人一区二区| 久久综合久久综合久久| 欧美va天堂va视频va在线| 日韩午夜电影在线观看| 久久精品一二三| 精品少妇一区二区三区免费观看| 69av一区二区三区| 日韩一级片网站| 日韩三级电影网址| 亚洲精品一线二线三线| 久久一区二区三区四区| 久久欧美一区二区| 国产欧美精品一区| 国产精品理论片在线观看| 中文字幕亚洲欧美在线不卡| 综合欧美亚洲日本| 夜夜爽夜夜爽精品视频| 午夜免费久久看| 日本不卡不码高清免费观看| 精品影视av免费| 成人动漫中文字幕| 色综合天天综合| 欧美日韩国产高清一区二区 | 国产精品入口麻豆原神| 中文字幕一区二区三区在线播放| 日韩一区欧美一区| 亚洲成人一二三| 久久99最新地址| 99久久精品免费看国产免费软件| 91免费小视频| 这里只有精品视频在线观看| 久久这里只有精品首页| 亚洲色图都市小说| 日韩黄色小视频| 国产精品香蕉一区二区三区| www..com久久爱| 欧美一卡二卡三卡四卡| 国产欧美日本一区二区三区| 亚洲最大的成人av| 国产一区二区在线看| av中文字幕在线不卡| 欧美日韩在线三级| 久久网这里都是精品| 亚洲欧美精品午睡沙发| 麻豆精品一区二区三区| 99久久久国产精品| 精品久久久久香蕉网| 亚洲福中文字幕伊人影院| 精品在线免费观看| 欧美日韩成人在线一区| 中文字幕视频一区| 麻豆精品精品国产自在97香蕉| 91视视频在线观看入口直接观看www |