first commit
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user