$(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; } }); })($);