| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- mbui.define(['layer'], function (exports) {
- let layer = mbui.layer;
- var form = function (options) {
- // 默认配置选项
- var settings = $.extend({
- target: '#formBox',
- verify: {
- required: function (value) {
- if (!/[\S]+/.test(value)) {
- return '必填项不能为空';
- }
- },
- phone: function (value) {
- var EXP = /^1\d{10}$/;
- if (value && !EXP.test(value)) {
- return '手机号格式不正确';
- }
- },
- email: function (value) {
- var EXP = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
- if (value && !EXP.test(value)) {
- return '邮箱格式不正确';
- }
- },
- url: function (value) {
- var EXP = /^(#|(http(s?)):\/\/|\/\/)[^\s]+\.[^\s]+$/;
- if (value && !EXP.test(value)) {
- return '链接格式不正确';
- }
- },
- number: function (value) {
- if (value && isNaN(value)) {
- return '只能填写数字';
- }
- },
- date: function (value) {
- var EXP = /^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/;
- if (value && !EXP.test(value)) {
- return '日期格式不正确';
- }
- },
- identity: function (value) {
- //var EXP = /(^\d{15}$)|(^\d{17}(x|X|\d)$)/;
- var EXP = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/;
- if (value && !EXP.test(value)) {
- return '身份证号格式不正确';
- }
- }
- },
- errorClass: 'mbui-form-danger',
- successClass: 'mbui-form-success',
- errorMessageContainer: null, // 可以指定错误信息容器,例如:'div#error-message'
- submit: function (data) {
- console.log(data);
- }
- }, options);
- var formBox = $(settings.target);
- formBox.on('submit', function (event) {
- event.preventDefault();
- var isValid = true; //校验判断标识
- var field = {}; // 字段集合
- formBox.find('input,select,textarea').each(function () {
- if (isValid == false) {
- return false;
- }
- var $this = $(this),
- val = $this.val(),
- rule = $this.data('verify') || '',
- rules = rule.split('|'),
- errMsg = '';
- $this.removeClass(settings.errorClass); // 移除警示样式
- for (var i = 0; i < rules.length; i++) {
- var ruleName = rules[i],
- ruleFunc = settings.verify[ruleName];
- if (ruleFunc) {
- errMsg = ruleFunc(val);
- if (errMsg) {
- // 获取自定义必填项提示文本
- if (ruleName === 'required') {
- errMsg = $this.data('errortips') || errMsg;
- }
- isValid = false;
- break;
- }
- }
- }
- if (!isValid) {
- layer.error(errMsg);
- $this.removeClass(settings.successClass).addClass(settings.errorClass).focus();
- if (settings.errorMessageContainer) {
- $(settings.errorMessageContainer).text(errors.join('<br/>'));
- }
- } else {
- $this.removeClass(settings.errorClass).addClass(settings.successClass);
- }
- });
- //校验radio是否选中
- formBox.find('[data-verify="radio"]').each(function () {
- if (isValid == false) {
- return false;
- }
- var $this = $(this),errMsg = '至少要有一个单选按钮被选中';
- if ($this.find('[type="radio"]').is(':checked')) {
- console.log(errMsg);
- } else {
- errMsg = $this.data('errortips') || errMsg;
- isValid = false;
- }
- if (!isValid) {
- layer.error(errMsg);
- }
- });
- formBox.find('[data-verify="checkbox"]').each(function () {
- if (isValid == false) {
- return false;
- }
- var $this = $(this),errMsg = '至少要有一个多选按钮被选中';
- if ($this.find('[type="checkbox"]').is(':checked')) {
- console.log(errMsg);
- } else {
- errMsg = $this.data('errortips') || errMsg;
- isValid = false;
- }
- if (!isValid) {
- layer.error(errMsg);
- }
- });
- if (isValid) {
- // 如果所有验证都通过,则提交表单
- settings.submit(form.getValue(settings.target));
- }
- });
- };
- // 取值
- form.getValue = function (itemForm) {
- var nameIndex = {} // 数组 name 索引
- , field = {}
- , fieldElem = $(itemForm).find('input,select,textarea') // 获取所有表单域
- $.each(fieldElem, function (_, item) {
- var othis = $(this), init_name; // 初始 name
- item.name = (item.name || '').replace(/^\s*|\s*&/, '');
- if (!item.name) return;
- // 用于支持数组 name
- if (/^.*\[\]$/.test(item.name)) {
- var key = item.name.match(/^(.*)\[\]$/g)[0];
- nameIndex[key] = nameIndex[key] | 0;
- init_name = item.name.replace(/^(.*)\[\]$/, '$1[' + (nameIndex[key]++) + ']');
- }
- // 复选框和单选框未选中,不记录字段
- if (/^(checkbox|radio)$/.test(item.type) && !item.checked) return;
- field[init_name || item.name] = item.value;
- });
- return field;
- };
- // 输出接口
- exports('form', form);
- });
|