91 lines
3.5 KiB
JavaScript
Raw Normal View History

2025-02-28 09:29:43 +08:00
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();
$("<div />").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);
}
}
}
});