91 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
});