$(function () { var interval = 60; // 间隔函数,1秒执行 var curinterval; // 当前剩余秒数 var timerobj; // timer变量,控制时间 var requiredtips = '邮箱验证码不为空。'; var emptyemailtips = '请填写邮箱。'; var data = $('[data-type=emailmessagevalidate]'); var requesturl, codeelement, basiselement, tips; var codeintervaltime = data.attr('data-val-codeintervaltime'); var reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]*[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/; var showgraphvalidatecodeurl = '/user/showgraphvalidatecode'; if (codeintervaltime == '' || codeintervaltime == null || codeintervaltime == undefined) { codeintervaltime = '60'; } initcodeintervaltime(); $.each(data, function (i, v) { var getcodebtn = $(v).children('input[type=button]'); var element = $(v).attr('data-val-codeelement'); var emailmessagevalidatecode = $('#' + element); if (emailmessagevalidatecode.length > 0) { emailmessagevalidatecode.rules('add', { required: true, messages: { required: requiredtips } }); } getcodebtn.unbind().click(function () { getcode(getcodebtn); }); }); function getcode(_this) { var checkemail = $(_this).data('nocheckemail'); $(_this).attr("message", "重发验证码"); setinfo(_this); var modal = _this.parents().children('#showgraphvalidatecodemodal'); var isshow = modal.css('display'); tipsclasshandler(); var emailaddress = $('#' + basiselement).val(); if (emailaddress) { emailaddress = emailaddress.trim(); } if (emailaddress === '' || !emailaddress) { tips.html(gettipshtml(false, emptyemailtips)); return; } if (!reg.test(emailaddress) && !checkemail) { return false; } $.get(showgraphvalidatecodeurl, function (data) { var result = false; var ticketid = $("#js-ticketid_mail-vc").val(); var jsticketvalue = $("#js-ticket_mail-vc").val(); if (data.tostring() == 'true' || data.tostring() == 'true') { result = true; } if (result && modal.length == 0) { tips.html(gettipshtml(false, "缺少图形验证码标记,请联系管理员!")); return false; } if (result && isshow == 'none' && !ticketid) { $("#js-btn-verify_mail-vc").attr("captcha-after","js-btn-verify_mail-vc"); simcaptcha.setsuccesscallback("js-btn-verify_mail-vc",function(){ _this.click(); }); $("#js-btn-verify_mail-vc").click(); return; } var code = ticketid; var username = $("#username").val(); tipsclasshandler(); if (result) { if (code === '') { modal.find('#graph-validation-error').html("验证码不能为空"); return; } } $.ajaxpreventcsrf({ type: 'post', datatype: 'json', url: requesturl, data: { 'emailaddress': emailaddress, 'username': username, captchaticketid:ticketid,captchaticket:jsticketvalue}, success: function (result) { if (result.state == 'error') { $('.graph-code-modal-backdrop').hide(); tips.html(gettipshtml(false, result.message)); } else { if (!result.issuccess && result.isgraphvalidatecode) { refreshvalidatecode() if ($(modal).find('#graph-validation-error').length == 0) { tips.html(gettipshtml(false, "缺少图形验证码")); } else { $(modal).find('#graph-validation-error').html(result.tips); $(modal).find('.validationcode img').click(); } } else { if (result.issuccess) { modal.hide(); $('.graph-code-modal-backdrop').hide(); // 设置按钮显示效果,倒计时 _this.attr('disabled', 'true'); interval = result.surplussecond; curinterval = interval; timerobj = window.setinterval(setremaintime, 1000); // 启动计时器,1秒执行一次 tips.html(gettipshtml(true, result.tips)); } else { modal.hide(); $('.graph-code-modal-backdrop').hide(); if (result.surplussecond > 0) { _this.attr('disabled', 'true'); curinterval = result.surplussecond; timerobj = window.setinterval(setremaintime, 1000); // 启动计时器,1秒执行一次 } tips.html(gettipshtml(false, result.tips)); } window.timerobj = timerobj; } } refreshvalidatecode(); } }); refreshvalidatecode(); }); } // timer处理函数 function setremaintime() { if (curinterval === 0) { window.clearinterval(timerobj); // 停止计时器 $.each(data, function (i, v) { var getcodebtn = $(v).children('input[type=button]'); var message = "发送验证码"; if ($(getcodebtn).attr("message")) { message = "重发验证码"; } getcodebtn.removeattr('disabled').val(message); // 启用按钮 }); } else { curinterval--; $.each(data, function (i, v) { var getcodebtn = $(v).children('input[type=button]'); getcodebtn.val(curinterval + 's'); }); } } function gettipshtml(issuccess, tipstext) { if (issuccess) { return '' + tipstext + ''; } return '' + tipstext + ''; } function tipsclasshandler() { tips.removeclass('field-validation-valid'); tips.addclass('field-validation-error'); } function initcodeintervaltime() { var cookie = getcookies(); var cookietime = cookie["power::emailvalidatecode::intervaltime"]; var nowtime = parseint(new date().gettime() / 1000); var intervaltime = parseint(codeintervaltime); if (intervaltime < 0 || intervaltime == 0) { intervaltime = 60; } if (nowtime - parseint(cookietime) < intervaltime) { if (nowtime - parseint(cookietime) < 0) { curinterval = 60; } else { curinterval = intervaltime - (nowtime - parseint(cookietime)); } // 设置按钮显示效果,倒计时 $.each(data, function (i, v) { var getcodebtn = $(v).children('input[type=button]'); getcodebtn.attr('disabled', 'true'); }); timerobj = window.setinterval(setremaintime, 1000); // 启动计时器,1秒执行一次 } } function getcookies() { var cookiestr = document.cookie; var cookie = {}; if (cookiestr != '') { var cookiestrs = cookiestr.split(';'); $.each(cookiestrs, function (i, v) { var item = v.split('='); cookie[item[0].replace(/(^\s*)|(\s*$)/g, "")] = item[1].replace(/(^\s*)|(\s*$)/g, ""); }); } return cookie; } function refreshvalidatecode() { window.captchacallbackdynamicname(function () { }); } $("#showgraphvalidatecodemodal .close").click(function () { $(this).parents('#showgraphvalidatecodemodal').hide(); $('.graph-code-modal-backdrop').hide(); }); function setheight(index) { $('#showgraphvalidatecodemodal .modal-dialog').css('margin-top', index); } function setinfo(_this) { var info = _this.parents('[data-type=emailmessagevalidate]'); requesturl = info.attr('data-val-requesturl'); codeelement = info.attr('data-val-codeelement'); basiselement = info.attr('data-val-basiselement'); tips = info.next('[data-valmsg-for=' + codeelement + ']'); } $(data).children('input').on('keydown', function () { var value = $(this).val(); if (value.length >= 8) { return false; } }); });