⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jquery.form.js

📁 STCMS 音乐系统 v2.5 build 090501: 为达到最佳效果
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* * jQuery Form Plugin * @requires jQuery v1.1 or later * * Examples 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 3028 2007-08-31 13:37:36Z joern.zaefferer $ */ (function($) {/** * ajaxSubmit() provides a mechanism for submitting an HTML form using AJAX. * * ajaxSubmit accepts a single argument which can be either a success callback function * or an options Object.  If a function is provided it will be invoked upon successful * completion of the submit and will be passed the response from the server. * If an options Object is provided, the following attributes are supported: * *  target:   Identifies the element(s) in the page to be updated with the server response. *            This value may be specified as a jQuery selection string, a jQuery object, *            or a DOM element. *            default value: null * *  url:      URL to which the form data will be submitted. *            default value: value of form's 'action' attribute * *  type:     The method in which the form data should be submitted, 'GET' or 'POST'. *            default value: value of form's 'method' attribute (or 'GET' if none found) * *  data:     Additional data to add to the request, specified as key/value pairs (see $.ajax). * *  beforeSubmit:  Callback method to be invoked before the form is submitted. *            default value: null * *  success:  Callback method to be invoked after the form has been successfully submitted *            and the response has been returned from the server *            default value: null * *  dataType: Expected dataType of the response.  One of: null, 'xml', 'script', or 'json' *            default value: null * *  semantic: Boolean flag indicating whether data must be submitted in semantic order (slower). *            default value: false * *  resetForm: Boolean flag indicating whether the form should be reset if the submit is successful * *  clearForm: Boolean flag indicating whether the form should be cleared if the submit is successful * * * The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for * validating the form data.  If the 'beforeSubmit' callback returns false then the form will * not be submitted. The 'beforeSubmit' callback is invoked with three arguments: the form data * in array format, the jQuery object, and the options object passed into ajaxSubmit. * The form data array takes the following form: * *     [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] * * If a 'success' callback method is provided it is invoked after the response has been returned * from the server.  It is passed the responseText or responseXML value (depending on dataType). * See jQuery.ajax for further details. * * * The dataType option provides a means for specifying how the server response should be handled. * This maps directly to the jQuery.httpData method.  The following values are supported: * *      'xml':    if dataType == 'xml' the server response is treated as XML and the 'success' *                   callback method, if specified, will be passed the responseXML value *      'json':   if dataType == 'json' the server response will be evaluted and passed to *                   the 'success' callback, if specified *      'script': if dataType == 'script' the server response is evaluated in the global context * * * Note that it does not make sense to use both the 'target' and 'dataType' options.  If both * are provided the target will be ignored. * * The semantic argument can be used to force form serialization in semantic order. * This is normally true anyway, unless the form contains input elements of type='image'. * If your form must be submitted with name/value pairs in semantic order and your form * contains an input of type='image" then pass true for this arg, otherwise pass false * (or nothing) to avoid the overhead for this logic. * * * When used on its own, ajaxSubmit() is typically bound to a form's submit event like this: * * $("#form-id").submit(function() { *     $(this).ajaxSubmit(options); *     return false; // cancel conventional submit * }); * * When using ajaxForm(), however, this is done for you. * * @example * $('#myForm').ajaxSubmit(function(data) { *     alert('Form submit succeeded! Server returned: ' + data); * }); * @desc Submit form and alert server response * * * @example * var options = { *     target: '#myTargetDiv' * }; * $('#myForm').ajaxSubmit(options); * @desc Submit form and update page element with server response * * * @example * var options = { *     success: function(responseText) { *         alert(responseText); *     } * }; * $('#myForm').ajaxSubmit(options); * @desc Submit form and alert the server response * * * @example * var options = { *     beforeSubmit: function(formArray, jqForm) { *         if (formArray.length == 0) { *             alert('Please enter data.'); *             return false; *         } *     } * }; * $('#myForm').ajaxSubmit(options); * @desc Pre-submit validation which aborts the submit operation if form data is empty * * * @example * var options = { *     url: myJsonUrl.php, *     dataType: 'json', *     success: function(data) { *        // 'data' is an object representing the the evaluated json data *     } * }; * $('#myForm').ajaxSubmit(options); * @desc json data returned and evaluated * * * @example * var options = { *     url: myXmlUrl.php, *     dataType: 'xml', *     success: function(responseXML) { *        // responseXML is XML document object *        var data = $('myElement', responseXML).text(); *     } * }; * $('#myForm').ajaxSubmit(options); * @desc XML data returned from server * * * @example * var options = { *     resetForm: true * }; * $('#myForm').ajaxSubmit(options); * @desc submit form and reset it if successful * * @example * $('#myForm).submit(function() { *    $(this).ajaxSubmit(); *    return false; * }); * @desc Bind form's submit event to use ajaxSubmit * * * @name ajaxSubmit * @type jQuery * @param options  object literal containing options which control the form submission process * @cat Plugins/Form * @return jQuery */$.fn.ajaxSubmit = function(options) {    if (typeof options == 'function')        options = { success: options };    options = $.extend({        url:  this.attr('action') || window.location,        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 = {};    $.event.trigger('form.pre.serialize', [this, options, veto]);    if (veto.veto) return this;    var a = this.formToArray(options.semantic);	if (options.data) {	    for (var n in options.data)	        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) return this;    // fire vetoable 'validate' event    $.event.trigger('form.submit.validate', [a, this, options, veto]);    if (veto.veto) return this;    var q = $.param(a);//.replace(/%20/g,'+');    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) {            if (this.evalScripts)                $(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, arguments);            else // jQuery v1.1.4                $(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](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;    if (options.iframe || found) // options.iframe allows user to force iframe mode        fileUpload();    else        $.ajax(options);    // fire 'notify' event    $.event.trigger('form.submit.notify', [this, options]);    return this;    // private function for handling file uploads (hat tip to YAHOO!)    function fileUpload() {        var form = $form[0];        var opts = $.extend({}, $.ajaxSettings, options);        var id = 'jqFormIO' + $.fn.ajaxSubmit.counter++;        var $io = $('<iframe id="' + id + '" name="' + id + '" />');        var io = $io[0];        var op8 = $.browser.opera && window.opera.version() < 9;        if ($.browser.msie || op8) io.src = 'javascript:false;document.write("");';        $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });        var xhr = { // mock object            responseText: null,            responseXML: null,            status: 0,            statusText: 'n/a',            getAllResponseHeaders: function() {},            getResponseHeader: function() {},            setRequestHeader: function() {}        };        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]);        var cbInvoked = 0;        var timedOut = 0;        // take a breath so that pending repaints get some cpu time before the upload starts        setTimeout(function() {            $io.appendTo('body');            // jQuery's event binding doesn't work for iframe events in IE            io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);            // make sure form attrs are set            var encAttr = form.encoding ? 'encoding' : 'enctype';            var t = $form.attr('target');            $form.attr({                target:   id,                method:  'POST',                action:   opts.url            });            form[encAttr] = 'multipart/form-data';            // support timout            if (opts.timeout)                setTimeout(function() { timedOut = true; cb(); }, opts.timeout);            form.submit();            $form.attr('target', t); // reset target        }, 10);        function cb() {            if (cbInvoked++) return;            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);            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;                xhr.responseText = doc.body ? doc.body.innerHTML : null;                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;                if (opts.dataType == 'json' || opts.dataType == 'script') {                    var ta = doc.getElementsByTagName('textarea')[0];                    data = ta ? ta.value : xhr.responseText;                    if (opts.dataType == 'json')                        eval("data = " + data);                    else                        $.globalEval(data);                }                else if (opts.dataType == 'xml') {                    data = xhr.responseXML;                    if (!data && xhr.responseText != null)                        data = toXml(xhr.responseText);                }                else {                    data = xhr.responseText;                }            }            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            setTimeout(function() {                $io.remove();                xhr.responseXML = null;            }, 100);        };        function toXml(s, doc) {            if (window.ActiveXObject) {                doc = new ActiveXObject('Microsoft.XMLDOM');                doc.async = 'false';                doc.loadXML(s);            }            else                doc = (new DOMParser()).parseFromString(s, 'text/xml');            return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;        };    };};$.fn.ajaxSubmit.counter = 0; // used to create unique iframe ids/** * ajaxForm() provides a mechanism for fully automating form submission. * * The advantages of using this method instead of ajaxSubmit() are: * * 1: This method will include coordinates for <input type="image" /> elements (if the element *    is used to submit the form). * 2. This method will include the submit element's name/value data (for the element that was *    used to submit the form). * 3. This method binds the submit() method to the form for you. * * Note that for accurate x/y coordinates of image submit elements in all browsers * you need to also use the "dimensions" plugin (this method will auto-detect its presence). * * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely * passes the options argument along after properly binding events for submit elements and * the form itself.  See ajaxSubmit for a full description of the options argument. * * * @example * var options = { *     target: '#myTargetDiv' * }; * $('#myForm').ajaxSForm(options); * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response *       when the form is submitted. * * * @example * var options = { *     success: function(responseText) { *         alert(responseText); *     } * }; * $('#myForm').ajaxSubmit(options); * @desc Bind form's submit event so that server response is alerted after the form is submitted. *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -