require.config({ paths: { 'clicaptcha': '../addons/clicaptcha/js/clicaptcha' }, shim: { 'clicaptcha': { deps: [ 'jquery', 'css!../addons/clicaptcha/css/clicaptcha.css' ], exports: '$.fn.clicaptcha' } } }); require(['form'], function (Form) { window.clicaptcha = function (captcha) { require(['clicaptcha'], function (undefined) { captcha = captcha ? captcha : $("input[name=captcha]"); if (captcha.length > 0) { var form = captcha.closest("form"); var parentDom = captcha.parent(); // 非文本验证码 if ($("a[data-event][data-url]", parentDom).length > 0) { return; } if (captcha.parentsUntil(form, "div.form-group").length > 0) { captcha.parentsUntil(form, "div.form-group").addClass("hidden"); } else if (parentDom.is("div.input-group")) { parentDom.addClass("hidden"); } captcha.attr("data-rule", "required"); // 验证失败时进行操作 captcha.on('invalid.field', function (e, result, me) { //必须删除errors对象中的数据,否则会出现Layer的Tip delete me.errors['captcha']; captcha.clicaptcha({ src: '/addons/clicaptcha/index/start', success_tip: '验证成功!', error_tip: '未点中正确区域,请重试!', callback: function (captchainfo) { form.trigger("submit"); return false; } }); }); // 监听表单错误事件 form.on("error.form", function (e, data) { captcha.val(''); }); } }); }; // clicaptcha($("input[name=captcha]")); if (typeof Frontend !== 'undefined') { Frontend.api.preparecaptcha = function (btn, type, data) { require(['form'], function (Form) { $("#clicaptchacontainer").remove(); $("
").attr("id", "clicaptchacontainer").addClass("hidden").html(Template("captchatpl", {})).appendTo("body"); var form = $("#clicaptchacontainer form"); form.data("validator-options", { valid: function (ret) { data.captcha = $("input[name=captcha]", form).val(); Frontend.api.sendcaptcha(btn, type, data, function (data, ret) { console.log("ok"); }); return true; } }) Form.api.bindevent(form); }); }; } var _bindevent = Form.events.bindevent; Form.events.bindevent = function (form) { _bindevent.apply(this, [form]); var captchaObj = $("input[name=captcha]", form); if (captchaObj.length > 0) { captchaObj.closest("form").find("button[type=submit]").removeAttr("disabled"); clicaptcha(captchaObj); if ($(form).attr("name") === 'captcha-form') { setTimeout(function () { captchaObj.trigger("invalid.field", [{key: 'captcha'}, {errors: {}}]); }, 100); } } } });