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