/** * Created by yaoyc on 2016/8/11. * Updated by jiangw on 2017/4/26. * Updated by yaoyc on 2017/5/22 *nsw */ /*global,nsw*/ (function ($) { "use strict"; $.fn.nsw = function (options) { var base = $('head').data('base'); var verify; this.defaults = { getCodeBtn: '.getcode_gg', codeggInput: '.code_gg', refresh:'.getcode_gg', btnCell: '.submit', mainCell: '.bd', row: '.row', timeHint: '.timenum', timeInterval: 30, isValidate: true, ts: null, reset: '.reset', hasId:false, isPreview:false, errorModal:false, lyFields:{}, formInfo:{} }; var opt = $.extend({}, this.defaults, options); var defaultObj = $(this); if(window.parent){ opt.isPreview = window.parent.location.href.search('state=preview')>0; }else if(window.parent.location.search){ opt.isPreview = window.location.href.search('state=preview')>0; } if(opt.isPreview){ defaultObj.find(opt.getCodeBtn).attr('src','data:image/png;base64,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'); } //验证函数 verify = function verify() { var service = {}; service.run = function run(type, value, msg,label) { switch (type) { case undefined: return service.required(value);break; case 'phone': return service.checkPhone(value); case 'email': return service.checkEmail(value); case 'number': return service.checkNumber(value); case 'url': return service.checkUrl(value); case '': return service.required(value); default: return service.checkReg(type, value, msg,label); } }; service.checkPhone = function checkPhone(value) { var phone = /^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/; return { flog: phone.test(value), msg: '请填写正确的手机号码!' }; }; service.checkEmail = function checkEmail(value) { var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; return { flog: email.test(value), msg: '请填写正确的email!' }; }; service.checkReg = function checkReg(type, value, msg,label) { var reg = eval(type); return { flog: reg.test(value), msg:label+ msg }; }; service.checkNumber = function checkNumber(value){ var numReg = /^[0-9]*$/; return { flog: numReg.test(value), msg: '请填写数字!' }; }; service.checkUrl = function checkUrl(value){ var numReg = /((http|ftp|http):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?/; return { flog: numReg.test(value), msg: '请填写网址!' }; }; service.required = function required(value, lable) { if (!value.length) { return { flog: false, msg: lable + '不能为空!' }; } else { return { flog: true }; } }; service.checkForm = function checkForm(obj,errorModal) { var msg, pattern, label, inputLength; msg = obj.attr('msg') ? obj.attr('msg') : '请正确输入!'; inputLength = obj.attr('maxLength') || 200; pattern = obj.attr('pattern'); label = obj.parent(opt.row).find('.row-hd').text(); if(!label){ label = obj.attr('title'); } if (obj.attr('label')) { label = obj.attr('label'); } if (label) { label = label.replace(/[\s:?|]*/ig, ''); } if (obj.attr('required')) { var requiredReturn = Verify.required(obj.val(), label); if (!requiredReturn.flog) { if(errorModal){ Verify.showModal(requiredReturn.msg,false); }else { obj.siblings('.nsw-formtipbd').show().html(requiredReturn.msg); } obj.addClass('err'); return false; } } if (obj.val() !== '') { var returnInfo = Verify.run(pattern, obj.val(), msg,label); if (!returnInfo.flog) { if(errorModal){ Verify.showModal(returnInfo.msg,false); }else{ obj.siblings('.nsw-formtipbd').show().html(returnInfo.msg); } obj.addClass('err'); return false; } else { var totalCount =0; for(var i=0; i= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)){ totalCount++; } else{ totalCount+=2; } } if (totalCount > inputLength) { if(errorModal){ Verify.showModal("字段长度不能超过"+inputLength/2+"个汉字或" + inputLength+"个字符",false); }else { obj.siblings('.nsw-formtipbd').show().html("字段长度不能超过"+inputLength/2+"个汉字或" + inputLength+"个字符"); } obj.addClass('err'); return false; } else { obj.removeClass('err'); obj.siblings('.nsw-formtipbd').hide(); return true; } } } return true; }; service.checkSelect = function checkSelect(obj) { var label = obj.parent(opt.row).find('.row-hd').html(); if (obj.attr('label')) { label = obj.attr('label'); } if (label) { label = label.replace(/[\s:?|]*/ig, ''); } if (obj.attr('required') && obj.val() === '-1') { obj.siblings('.nsw-formtipbd').show().html(label + "需要选择!"); obj.addClass('err'); return false; } else { obj.removeClass('err'); obj.siblings('.nsw-formtipbd').hide(); } return true; }; service.checkAll = function checkAll(inputAndTextarea, selects) { var flog = true; inputAndTextarea.each(function () { var obj = $(this); flog = Verify.checkForm(obj,opt.errorModal) && flog; return flog; }); selects.each(function () { var obj = $(this); flog = Verify.checkSelect(obj,opt.errorModal) && flog; return flog; }); return flog; }; service.countdown = function countdown(time) { if (time > 0) { time--; if(defaultObj.find(opt.timeHint).length){ defaultObj.find(opt.timeHint).html("请" + time + "秒后再次提交!"); }else{ if (!defaultObj.find(opt.btnCell).siblings('b').length) { opt.ts = defaultObj.find(opt.btnCell).parent().append(" "); } opt.ts.find("b").show().html("请" + time + "秒后再次提交!");} defaultObj.find(opt.btnCell).attr("disabled", "disabled"); setTimeout(function () { service.countdown(time); }, 1000); } else { //ts.find("b").html(""); defaultObj.find(opt.btnCell).removeAttr("disabled"); if(defaultObj.find(opt.timeHint).length){ defaultObj.find(opt.timeHint).html(""); }else{ opt.ts.find("b").hide(); } } }; service.getRowInfoById = function getRowInfoById(data, id) { if (data[id]) { return data[id]; } }; service.showModal = function showModal(msg,flog){ var $tipHtml = $('
'); $tipHtml.find('.msg').html(msg); if(flog){ $tipHtml.find('.modal-body-left .icon').addClass('success-message'); }else{ $tipHtml.find('.modal-body-left .icon').addClass('warming-message'); $tipHtml.find('.modal-body-right .msg-title').html('错误信息:'); } $("body").append($tipHtml); $tipHtml.find('.close,.close-btn').click(function(){ $tipHtml.remove(); }); }; return service; }; var Verify = new verify(); if(opt.hasId&&opt.lyFields){ defaultObj.find(opt.row).each(function(){ var ele = Verify.getRowInfoById(opt.lyFields,$(this).attr('id')); if(ele){ $(this).find('input,select,textarea').attr({ name:ele.fieldName, required:ele.isRequired, pattern:ele.regular, maxLength:ele.length||200, label:ele.title }); } }); } /*事件绑定 * a.验证码刷新 * */ //刷新验证码(先保留默认路径,看后期是否会进行优化) defaultObj.find(opt.refresh).unbind('click').click(function () { if(opt.isPreview){ return; } defaultObj.find('.getcode_gg').attr("src", base+'Tools/code/code_gg.htmp?' + Math.random()); }); //监控input[text] 和select失去焦点后触发验证 opt.inputAndTextarea = defaultObj.find(opt.row + " input[type='text']," + opt.row + " textarea"); opt.inputAndTextarea.unbind('blur').blur(function () { var obj = $(this); if(!$(this).val()){ obj.removeClass('err'); return } Verify.checkForm(obj,opt.errorModal); }); opt.inputAndTextarea.unbind('keyup').keyup(function(){ if(opt.errorModal){ return; } var obj = $(this); var inputLength = obj.attr('maxLength') || 200; var totalCount =0; for(var i=0; i= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)){ totalCount++; } else{ totalCount+=2; } } if (totalCount > inputLength) { obj.siblings('.nsw-formtipbd').show().html("字段长度不能超过"+inputLength/2+"个汉字或" + inputLength+"个字符"); obj.addClass('err'); return false; } else { obj.removeClass('err'); obj.siblings('.nsw-formtipbd').hide(); return true; } }); //select选择后 opt.selects = defaultObj.find(opt.row + " select"); opt.selects.unbind('change').change(function () { var obj = $(this); Verify.checkSelect(obj); }); defaultObj.find(opt.reset).unbind('click').click(function () { defaultObj[0].reset(); }); //提交表单 defaultObj.find(opt.btnCell).unbind('click').click(function () { var codegg, isVerify; isVerify = Verify.checkAll(opt.inputAndTextarea, opt.selects); if (!isVerify) { return; } if (!opt.isValidate||opt.isValidate==='false') { codegg = true; }else if(opt.formInfo.isValidate!==undefined&&!opt.formInfo.isValidate){ codegg = true; } else { if(opt.isPreview){ codegg = true; }else{ var code_gg = defaultObj.find(opt.codeggInput).val(); codegg = false; $.ajax({ type: "post", url: base+"Tools/code/chk_code.htmp?act=gg", data: "code=" + code_gg, async: false, success: function (msg) { if (msg === '1') { codegg = true; defaultObj.find(opt.getCodeBtn).attr("src", base+'Tools/code/code_gg.htmp?' + Math.random()); } else { Verify.showModal("验证码错误!",false); defaultObj.find(opt.getCodeBtn).attr("src", base+'Tools/code/code_gg.htmp?' + Math.random()); codegg = false; return; } } }); } } if (codegg && isVerify) { var dt = defaultObj.serializeObject(); if(opt.hasId){ dt.projId = opt.formInfo.projId; dt.formId = opt.formInfo._id; } var url = ""; if ($("input[name='vcenter']").length) { url = $("input[name='vcenter']").val(); } if (opt.formInfo.vcenter) { url =opt.formInfo.vcenter; } $.ajax({ 'url': url + "?json=" + JSON.stringify(dt).replace("%","%25"), 'type': 'post', 'dataType': 'jsonp', 'jsonpCallback': 'callback', 'error': function (data) { Verify.showModal("提交失败!",false); console.log(data); }, 'success': function (data) { defaultObj[0].reset(); Verify.showModal(data.msg,true); var baseTime = opt.timeInterval||opt.formInfo.timeInterval; Verify.countdown(baseTime); } }); } }); }; $.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); $.each(a, function () { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; })($); /*调用表单*/ $(function(){ var formEl = $('.intentionalOrderFormId'); $.each(formEl, function(index, formItem){ var timeinterval = $(formItem).find('.timeinterval').val(); var isvalidate = $(formItem).find('.isvalidate').val(); $(formItem).nsw({ btnCell: '.form-btn-submit', reset: '.form-btn-reset', timeInterval: timeinterval, isValidate: isvalidate, row: 'ul li', errorModal:true }); }); })