$(function () { $(".g-form-components").click(function () { var _this = $(this); if (!!_this.data("do") && _this.data("do") === '1') { return ''; } else { _this.data("do", "1"); } var formData = $.formComData(_this); if (formData === false) { _this.data("do", "0"); return ''; } // ajax 提交数据 $.ajax({ type: "POST", url: formData.postUrl, data: formData, dataType: "json", success: function (_ret) { _this.data("do", "0"); var componentsParentId = _this.data("comtag"); $("#" + componentsParentId).find("img[name='captcha']").click(); if (_ret._return !== "success") { if (_ret.code == '2') { layer.alert($.languagePack(_ret.language), function (index) { window.location.reload(); layer.close(index); }); $(".layui-layer-close").click(function () { window.location.reload(); }); return ''; } if (!!_ret.message) { layer.alert(_ret.message, function (index) { if (_ret.code == '1') { var componentsParentId = _this.data("comtag"); $("#" + componentsParentId).find("input[name='captcha']").focus(); } layer.close(index); }); $(".layui-layer-close").click(function () { if (_ret.code == '1') { var componentsParentId = _this.data("comtag"); $("#" + componentsParentId).find("input[name='captcha']").focus(); } }); } return false; } else { // 成功 if (!!_ret.message) { layer.alert(_ret.message, function (index) { window.location.reload(); layer.close(index); }); $(".layui-layer-close").click(function () { window.location.reload(); }); } } }, error: function () { return ajaxError(); } }); }); }); (function ($) { $.extend({ // 公开插件入口 "formComData": function (options) { // 内部定义一个插件获取相应的数据 if (typeof this.privateFunction === "undefined") { this.privateFunction = $.extend({ "formGetFormComponents": function (_this) { var componentsParentId = _this.data("comtag"); var _componentsParent = $("#" + componentsParentId); if (_componentsParent.length < 1) { return false; } return _componentsParent; }, "formGetParmes": function (_componentsParent) { if (_componentsParent.find("input[name='box-id']:hidden").length > 0) { var boxId = _componentsParent.find("input[name='box-id']:hidden").val(); } if (_componentsParent.find("input[name='post-url']:hidden").length > 0) { var postUrl = _componentsParent.find("input[name='post-url']:hidden").val(); } if (_componentsParent.find("input[name='component-type']:hidden").length > 0) { var compType = _componentsParent.find("input[name='component-type']:hidden").val(); } if (_componentsParent.find("input[name='page-id']:hidden").length > 0) { var pageId = _componentsParent.find("input[name='page-id']:hidden").val(); } if (typeof boxId === 'undefined' || typeof postUrl === 'undefined' || typeof compType === 'undefined' || typeof pageId === 'undefined') { console.error('Undefined boxId OR postUrl'); return false; } return {boxId: boxId, postUrl: postUrl, compType: compType, pageId: pageId}; }, "formGetFormData": function (_form, boxId) { var result = {}; var i = 0; _form.find("input").each(function (key) { var _this = $(this); if (_this.data("boxid") == boxId && typeof _this.data("variable") !== "undefined") { var _data = eval(_this.data("variable")); _data.comthis = _this; _data.value = _this.val(); result[i] = _data; i++; } }); return result; }, "formGetGivenData": function (_form, boxId) { var result = {}; var i = 0; _form.find("input").each(function (key) { var _this = $(this); if (_this.data("boxid") == boxId && typeof _this.data("rule") !== "undefined") { var _data = { comthis: _this, comid: _this.data("comid"), boxid: _this.data("boxid"), rule: _this.data("rule"), message: _this.data("message") }; result[i] = _data; i++; } }); return result; }, "formGetCaptcha": function (_form) { if ($.trim(_form.find("input[name='captcha']")).length > 0) { return $.trim(_form.find("input[name='captcha']").val()); } return ''; } }); } var _this = $.extend({errorInfos: {}}, options); // 获取表单组件节点 var _componentsParent = this.privateFunction.formGetFormComponents(_this); if (_componentsParent === false) { return false; } // 获取 boxId、compType 以及 postUrl 登录数据 var formParmes = this.privateFunction.formGetParmes(_componentsParent); if (this.formParmes === false) { return false; } // 获取表单组件中的表单数据 var formData = this.privateFunction.formGetFormData(_componentsParent, formParmes.boxId); if (formData.length < 1) { return false; } // 验证表单规则定义 // if (typeof this.formValidation === "undefined") { this.formValidation = $.extend({ // 错误提示 "messageBox": function (message, obj) { _this.errorInfos[obj.data('comid')] = { message: message, obj: obj }; // console.log(); // layer.alert(message, function (index) { // obj.focus(); // layer.close(index); // }); // obj.focus(); // $(".layui-layer-close").click(function () { // obj.focus(); // }); }, // 不能为空 "required": function (_data, ruleData) { if (typeof _data.value === "undefined" || $.trim(_data.value) === "" || strlen(_data.value) === 0) { this.messageBox(ruleData.message, _data.comthis); return false; } return true; }, "rlength": function (_data, ruleData) { if (typeof ruleData.is !== "undefined") { if (strlen(_data.value) != parseInt(ruleData.is)) { this.messageBox(ruleData.message, _data.comthis); return false; } return true; } else { if (typeof ruleData.min !== "undefined") { if (strlen(_data.value) < parseInt(ruleData.min)) { this.messageBox(ruleData.message, _data.comthis); return false; } } if (typeof ruleData.max !== "undefined") { if (strlen(_data.value) > parseInt(ruleData.max)) { this.messageBox(ruleData.message, _data.comthis); return false; } } return true; } }, "email": function (_data, ruleData) { if (_data.value == "") { return true; } var pb = /^[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(_data.value); if (!pb) { this.messageBox(ruleData.message, _data.comthis); return false; } return true; }, "phone": function (_data, ruleData) { if (_data.value == "") { return true; } var pb = /^[0-9\-\+\,\;\,\;]+$/.test(_data.value); if (!pb) { this.messageBox(ruleData.message, _data.comthis); return false; } return true; } }); // } /** * 对于特定的表单验证的过程 */ // 验证特殊表单规则 // if (typeof this.givenValidation === "undefined") { this.givenValidation = $.extend({ // 首先需要关联到表单以及表单结果的数据上 "controller": function (givenData, formData) { var bool = true; var gvalue = null; for (var i in givenData) { givenData[i].comid for (var k in formData) { if (formData[k].id == givenData[i].comid) { gvalue = formData[k].value; break; } } if (givenData[i].rule === 'required' && (gvalue === null || gvalue === "")) { // layer.alert(givenData[i].message, function (index) { // layer.close(index); // }); _this.errorInfos[givenData[i].comid] = { message: givenData[i].message, obj: givenData[i].comthis }; bool = false; } gvalue = null; } return bool; } }); // } var givenData = this.privateFunction.formGetGivenData(_componentsParent, formParmes.boxId); // 对表单数据验证的过程 var bool = true; var formItem = new Array; $.each(formData, function (key, _data) { if ($.formComDataValidation(_data) === true) { formItem[key] = { id: _data.id, name: _data.name, value: _data.value, item: typeof _data.item !== "undefined" ? _data.item : 0 }; } else { bool = false; } }); if (this.givenValidation.controller(givenData, formData) === false) { bool = false; } if (bool === true) { // 验证验证码是否为空 var captcha = this.privateFunction.formGetCaptcha(_componentsParent); if (captcha === "") { layer.alert(languagePack('verificationCodeCannotBeEmpty'), function (index) { if (_componentsParent.find("input[name='captcha']").length > 0) { _componentsParent.find("input[name='captcha']").focus(); } layer.close(index); }); $(".layui-layer-close").click(function () { _componentsParent.find("input[name='captcha']").focus(); }); return false; } else if (captcha.length != 4) { layer.alert(languagePack('pleaseEnter4VerificationCode'), function (index) { if (_componentsParent.find("input[name='captcha']").length > 0) { _componentsParent.find("input[name='captcha']").focus(); } layer.close(index); }); $(".layui-layer-close").click(function () { _componentsParent.find("input[name='captcha']").focus(); }); return false; } var returnData = { formItem: formItem, captcha: captcha, boxId: formParmes.boxId, pageId: formParmes.pageId, postUrl: formParmes.postUrl }; return returnData; } else { // _componentsParent, formParmes.boxId // _componentsParent.find("input[data-boxid='"+formParmes.boxId+"']").each(function (key) { // var _this = $(this); // if (_this.data("boxid") == boxId && typeof _this.data("variable") !== "undefined") { // var _data = eval(_this.data("variable")); // _data.comthis = _this; // _data.value = _this.val(); // result[i] = _data; // i++; // } // }); // 从上到下获取表单 _componentsParent.find("input[data-boxid='" + formParmes.boxId + "']").each(function () { if (!!_this.errorInfos[$(this).data("comid")]) { var _info = _this.errorInfos[$(this).data("comid")]; if (!!_info.obj.data("variable")) { layer.alert(_info.message, function (index) { _info.obj.focus(); layer.close(index); }); _info.obj.focus(); $(".layui-layer-close").click(function () { obj.focus(); }); } else { layer.alert(_info.message, function (index) { layer.close(index); }); $(".layui-layer-close").click(function () { obj.focus(); }); } return false; } }); } return false; }, // 公开插件的验证入口,日后方便进行单个表单验证 "formComDataValidation": function (_data) { var bool = true; var formValidation = this.formValidation; if (typeof _data.rules === "string" && _data.rules === "") { return bool; } $.each(_data.rules, function (rule, ruleData) { if (bool === false) { return ''; } switch (rule) { case "required": if (formValidation.required(_data, ruleData) === false) { bool = false; } break; case "length": if (formValidation.rlength(_data, ruleData) === false) { bool = false; } break; case "email": if (formValidation.email(_data, ruleData) === false) { bool = false; } break; case "phone": if (formValidation.phone(_data, ruleData) === false) { bool = false; } break; case "default": if (ruleData === "NULL") { bool = true; } break; default : bool = false; console.error("Undefined rule : " + rule); return ''; } }); return bool; } }); })($);