/*!
* jQuery Validation Plugin v1.13.1
*
* http://jqueryvalidation.org/
*
* Copyright (c) 2014 Jörn Zaefferer
* Released under the MIT license
* modify to suport Zepto by jaryway at 2015.4.27 -v0.1.1
*/
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["zepto"], factory);
} else {
//让插件同时支持Zepto和jQuery
factory(window.Zepto || window.jQuery);
}
}(function ($) {
$.extend($.fn, {
// http://jqueryvalidation.org/validate/
validate: function (options) {
// if nothing is selected, return nothing; can't chain anyway
if (!this.length) {
if (options && options.debug && window.console) {
console.warn("Nothing selected, can't validate, returning nothing.");
}
return;
}
// check if a validator for this form was already created
var validator = $(this[0]).data("validator");
if (validator) {
return validator;
}
// Add novalidate tag if HTML5.
this.attr("novalidate", "novalidate");
validator = new $.validator(options, this[0]);
$(this[0]).data("validator", validator);
if (validator.settings.onsubmit) {
//this.validateDelegate(":submit", "click", function (event) {
this.validateDelegate("[type='submit']", "click", function (event) {
if (validator.settings.submitHandler) {
validator.submitButton = event.target;
}
// allow suppressing validation by adding a cancel class to the submit button
if ($(event.target).hasClass("cancel")) {
validator.cancelSubmit = true;
}
// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
var formnovalidateAttr = $(event.target).attr("formnovalidate");//修复null的情况下返回true的问题
if (formnovalidateAttr && formnovalidateAttr !== undefined) {
validator.cancelSubmit = true;
}
});
// validate the form on submit
this.submit(function (event) {
if (validator.settings.debug) {
// prevent form submit to be able to see console output
event.preventDefault();
}
function handle() {
var hidden, result;
if (validator.settings.submitHandler) {
if (validator.submitButton) {
// insert a hidden input as a replacement for the missing submit button
hidden = $("<input type='hidden'/>")
.attr("name", validator.submitButton.name)
.val($(validator.submitButton).val())
.appendTo(validator.currentForm);
}
result = validator.settings.submitHandler.call(validator, validator.currentForm, event);
if (validator.submitButton) {
// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
hidden.remove();
}
if (result !== undefined) {
return result;
}
return false;
}
return true;
}
// prevent submit for invalid forms or custom submit handlers
if (validator.cancelSubmit) {
validator.cancelSubmit = false;
return handle();
}
if (validator.form()) {
if (validator.pendingRequest) {
validator.formSubmitted = true;
return false;
}
return handle();
} else {
validator.focusInvalid();
return false;
}
});
}
return validator;
},
// http://jqueryvalidation.org/valid/
valid: function () {
var valid, validator;
if ($(this[0]).is("form")) {
valid = this.validate().form();
} else {
valid = true;
validator = $(this[0].form).validate();
this.each(function () {
valid = validator.element(this) && valid;
});
}
return valid;
},
// attributes: space separated list of attributes to retrieve and remove
removeAttrs: function (attributes) {
var result = {},
$element = this;
$.each(attributes.split(/\s/), function (index, value) {
result[value] = $element.attr(value);
$element.removeAttr(value);
});
return result;
},
// http://jqueryvalidation.org/rules/
rules: function (command, argument) {
var element = this[0],
settings, staticRules, existingRules, data, param, filtered;
if (command) {
settings = $(element.form).data("validator").settings;
staticRules = settings.rules;
existingRules = $.validator.staticRules(element);
switch (command) {
case "add":
$.extend(existingRules, $.validator.normalizeRule(argument));
// remove messages from rules, but allow them to be set separately
delete existingRules.messages;
staticRules[element.name] = existingRules;
if (argument.messages) {
settings.messages[element.name] = $.extend(settings.messages[element.name], argument.messages);
}
break;
case "remove":
if (!argument) {
delete staticRules[element.name];
return existingRules;
}
filtered = {};
$.each(argument.split(/\s/), function (index, method) {
filtered[method] = existingRules[method];
delete existingRules[method];
if (method === "required") {
$(element).removeAttr("aria-required");
}
});
return filtered;
}
}
data = $.validator.normalizeRules(
$.extend(
{},
$.validator.classRules(element),
$.validator.attributeRules(element),
$.validator.dataRules(element),
$.validator.staticRules(element)
), element);
// make sure required is at front
if (data.required) {
param = data.required;
delete data.required;
data = $.extend({ required: param }, data);
$(element).attr("aria-required", "true");
- 1
- 2
- 3
- 4
前往页