$(function () { $(".g-form-components").click(function () { var _this = $(this); if (!!_this.data("do") && _this.data("do") === '1') { return ''; } else { _this.data("do", "1"); } var formComData = $.formComData(_this); if (formComData === false) { _this.data("do", "0"); return ''; } var formData = formComData.data; var formCom = formComData.com; // 是否存在文件 var isUpload = false; for (var i in formCom) { if (formCom[i].comthis.attr("type") === 'file') { isUpload = true } } // ajax 上传文件提交数据 if (isUpload) { var fileFormData = new FormData(); fileFormData.append("boxId", formData.boxId); fileFormData.append("captcha", formData.captcha); fileFormData.append("pageId", formData.pageId); fileFormData.append("postUrl", formData.postUrl); var formItems = []; for (var i in formData.formItem) { var formItem = formData.formItem[i]; for (var j in formCom) { if (parseInt(formItem.id) === parseInt(formCom[j].id)) { if (formCom[j].comthis.attr("type") === 'file') { formItem.isFile = 1; fileFormData.append("file" + formItem.id, formCom[j].comthis[0].files[0]); } else { formItem.isFile = 0; } } } formItems[i] = formItem; } fileFormData.append("formItem", JSON.stringify(formItems)); $.ajax({ url: formData.postUrl, type: 'POST', data: fileFormData, cache: false, processData: false, contentType: false, 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(); }); } } } }); 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 val = _this.val(); if (_this.data('distpicker') && parseInt(_this.data('distpicker')) === 1) { var province = _this.next('div').find(".province option:selected").text(); var city = _this.next('div').find(".city option:selected").text(); var district = _this.next('div').find(".district option:selected").text(); if (province && city && district) { val = province + city + district } } var _data = eval(_this.data("variable")); _data.comthis = _this; _data.value = 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") }; // console.log(_data); 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 ''; }, "formGetCheckClause": function (_form) { // 后台未开启隐私条款设置 if(_form.find("input[name='checkClause']").length == 0){ return true; } if (_form.find("input[name='checkClause']").prop('checked')) { return true; } return false; }, "formGetEnterWords": function (_form) { if ($.trim(_form.find("input[name='enter_words']")).length > 0) { return $.trim(_form.find("input[name='enter_words']").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, width) { _this.errorInfos[obj.data('comid')] = { message: message, obj: obj, width: width }; // 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; }, "rili": function (_data, ruleData) { if (_data.value == "") { return true; } var utime = new Date(_data.value).getTime(); if (utime < 1) { this.messageBox(ruleData.message, _data.comthis); return false; } return true; }, "suffix": function (_data, ruleData) { var suf = _data.value.substr(_data.value.lastIndexOf('.') + 1); var bool = false; for (var i in ruleData.suffix) { var suff = ruleData.suffix[i]; if (suff === suf) { bool = true; } } if (bool) { return true; } this.messageBox(ruleData.message, _data.comthis, '350px'); return false; }, "size": function (_data, ruleData) { if (_data.comthis.next("input[name='fileSize']").val() && _data.comthis.next("input[name='fileSize']").val() > ruleData.size) { 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; var formComthis = 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 }; formComthis[key] = { id: _data.id, comthis: _data.comthis } } else { bool = false; } }); if (this.givenValidation.controller(givenData, formData) === false) { bool = false; } // 后台有开启隐私条款设置,需要勾选后才可以提交表单 var clause = this.privateFunction.formGetCheckClause(_componentsParent); if(clause === false){ bool = false; var enter_words = this.privateFunction.formGetEnterWords(_componentsParent); console.log(languagePack('ReadAndAgree')); console.log(languagePack('pleaseCheckTheClause')); console.log(languagePack('verificationCodeCannotBeEmpty')); layer.alert(languagePack('pleaseCheckTheClause')+'《'+enter_words+'》', function (index) { layer.close(index); }); } 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 {com: formComthis, data: 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")) { if (!!_info.width) { var _layer = layer; _layer.alert(_info.message, { area: _info.width, success: function (index) { _info.obj.focus(); } }); } else { 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 "rili": if (formValidation.rili(_data, ruleData) === false) { bool = false; } break; case "suffix": if (formValidation.suffix(_data, ruleData) === false) { bool = false; } break; case "size": if (formValidation.size(_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; } }); })(jQuery);