123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- import lib from '../lib/lib';
- import $ from 'jquery';
- var exports = {};
- exports.validateForm = validateForm;
- exports.getFormData = getFormData;
- function addFocus(input) {
- $(input).addClass("focus");
- if ($(input).hasClass('weui-input')) {
- $(input).parents('.weui-cell').addClass('weui-cell_warn');
- }
- }
- function removeFocus(input) {
- $(input).removeClass("focus");
- if ($(input).hasClass('weui-input')) {
- $(input).parents('.weui-cell').removeClass('weui-cell_warn');
- }
- }
- function initEvent() {
- $("body").on("click", ".focus", function() {
- removeFocus(this);
- });
- }
- initEvent();
- /**
- * 检查参数并获取表单数据
- * selector:表单选择器
- */
- function getFormData(selector) {
- var data = {};
- var $input = $(selector).find('input, select, textarea');
- $input.removeClass("hover");
- for (var i = 0; i < $input.length; i++) {
- var $this = $($input[i]);
- var key = $input[i].name || $input[i].id;
- if (key) {
- var type = $this.attr("type");
- if (type == "checkbox") {
- data[key] = $this.prop("checked");
- } else if (type == 'radio') {
- data[key] = $('[name="' + $this.attr('name') + '"]:checked').val();
- } else if (type != 'submit' && type != 'button') {
- data[key] = $.trim($this.val());
- }
- }
- }
- return data;
- }
- function validateForm(selector) {
- var $input = $(selector).find('input, select, textarea');
- $input.removeClass("hover");
- for (var i = 0; i < $input.length; i++) {
- var $this = $($input[i]);
- if (!_validate($this)) {
- return false;
- }
- }
- return true;
- }
- function _validate($this) {
- var funcList = [
- _validateRequire,
- _validateLength,
- _validateRange,
- _validateReg,
- _validateType
- ];
- for (var i = 0; i < funcList.length; i++) {
- if (!funcList[i]($this)) {
- return false;
- }
- }
- return true;
- }
- // 字符串格式化
- function _format(str) {
- if (arguments.length == 0) return null;
- var args = Array.prototype.slice.call(arguments, 1);
- return str.replace(/\{(\d+)\}/g, function(m, i){
- return args[i];
- });
- }
- function _getTitle($this) {
- var title = $this.attr('title');
- if (!title) {
- title = $this.parent().parent().find('.weui-label').text();
- }
- return title;
- }
- function _validateRequire($this) {
- if (!$this.attr('required')) {
- return true;
- }
- var required = $this.attr('required');
- var inputVal = $.trim($this.val());
- if (required && !inputVal) {
- lib.showTip("请输入" + _getTitle($this));
- addFocus($this);
- return false;
- }
- return true;
- }
- function _validateRange($this) {
- var range = $this.attr('data-range');
- var value = $.trim($this.val());
- if (!range || !value) {
- return true;
- }
- var reg = /(\d+),\s*(\d+|\+)*/;
- if (reg.test(range)) {
- var dataRange = range.match(reg);
- if (value < parseInt(dataRange[1])) {
- lib.showTip(_format('{1}不能少于{0}', dataRange[1], _getTitle($this)));
- addFocus($this);
- return false;
- } else if (parseInt(dataRange[2]) && value > parseInt(dataRange[2])) {
- lib.showTip(_format("{1}不能大于{0}", _getTitle($this), dataRange[2]));
- addFocus($this);
- return false;
- }
- }
- return true;
- }
- function _validateLength($this) {
- if (!$this.attr('data-length')) {
- return true;
- }
- var value = $.trim($this.val());
- // var length = strlen(value);
- var length = value.length;
- var reg = /(\d+),\s*(\d+|\+)*/;
- var dataLength = $this.attr('data-length');
- if (reg.test(dataLength)) {
- var dataRange = $this.attr('data-length').match(reg);
- if (length < parseInt(dataRange[1])) {
- lib.showTip(_format('请输入{0}个字以上的{1}', dataRange[1], _getTitle($this)));
- addFocus($this);
- return false;
- } else if (parseInt(dataRange[2]) && length > parseInt(dataRange[2])) {
- lib.showTip(_format("{0}不能超过{1}个字", _getTitle($this), dataRange[2]));
- addFocus($this);
- return false;
- }
- } else if (length != dataLength) {
- lib.showTip(_format("{0}应该为{1}个字", _getTitle($this), dataLength));
- addFocus($this);
- return false;
- }
- return true;
- }
- function _validateReg($this) {
- if (!$this.attr('data-reg')) {
- return true;
- }
- var reg = new RegExp($this.attr('data-reg'));
- var value = $.trim($this.val());
- if (reg.test(value)) {
- var msg = $this.attr('data-regMsg') || "不符合规范哦!";
- lib.showTip(_getTitle($this) + msg);
- addFocus($this);
- return false;
- }
- return true;
- }
- function _validateType($this) {
- if (!$.trim($this.val())) {
- return true;
- }
- var dataType = $this.attr('data-type');
- var typeList = dataType ? dataType.split('|') : [$this.attr("type")];
- var result = true;
- for (var i = 0, len = typeList.length; i < len; i++) {
- var type = typeList[i];
- if (_validateType2($this, type)) {
- return true;
- }
- }
- return false;
- }
- function _validateType2($this, type) {
- switch (type) {
- case 'email':
- return _validateMail($this);
- case 'tel':
- return _validateTel($this);
- case 'number':
- return _validateNum($this);
- default:
- return true;
- }
- }
- function _validateTel($this) {
- var value = $.trim($this.val());
- var reg = /^\d{11}$/;
- var strTip = "请输入正确的手机号码!";
- if (reg && !reg.test(value)) {
- lib.showTip(strTip);
- addFocus($this);
- return false;
- }
- return true;
- }
- function _validateNum($this) {
- var value = $.trim($this.val());
- var reg = /^\d+(\.\d+)*$/;
- var strTip = "请输入数字!";
- if (reg && !reg.test(value)) {
- lib.showTip(strTip);
- addFocus($this);
- return false;
- }
- return true;
- }
- function _validateMail($this) {
- var value = $.trim($this.val());
- var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
- if (!reg.test(value)) {
- lib.showTip("请输入合法的Email地址!");
- addFocus($this);
- return false;
- }
- return true;
- }
- export default exports;
|