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