91 lines
3.5 KiB
JavaScript
91 lines
3.5 KiB
JavaScript
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);
|
||
}
|
||
}
|
||
}
|
||
});
|