我在一个页面中使用了两个Recaptcha,其中有两个针对不同用户的表单。
我正在使用自定义主题使用AJAX API创建验证码,如下所示:
function showRecaptcha(element) {
Recaptcha.create(
'publice_key',
element, {
theme: 'custom',
callback: Recaptcha.focus_response_field
});
}
我在两种模式下使用它:
$("#to-teach").click(function() {
$("#sign-up-welcome").hide();
teachForm();
showRecaptcha('teachcaptcha');
return false;
});
而另一个
$("#to-student").click(function() {
$("#sign-up-welcome").hide();
studentForm();
showRecaptcha('studentcaptcha');
return false;
});
teachForm()
是:function teachForm() {
Recaptcha.destroy('studentcaptcha');
signup.show();
signupTitle.text("Sign Up as a Teacher");
}
和类似的destroy事件用作
Recaptcha.destroy('teachcaptcha');
用于自定义验证码的html是:
<div id="teachcaptcha">
<div id="recaptcha_image"></div>
<div class="captcha-input-box">
<input type="text" id="recaptcha_response_field" name="recaptcha_response_field" class="input-recaptcha" />
<a class="fontawesome-refresh" href="javascript:Recaptcha.reload()"></a>
<a class="fontawesome-headphones recaptcha_only_if_image" href="javascript:Recaptcha.switch_type('audio')"></a>
<a class="fontawesome-picture recaptcha_only_if_audio" href="javascript:Recaptcha.switch_type('image')"></a>
<a class="fontawesome-question" href="javascript:Recaptcha.showhelp()"></a>
</div>
</div>
对于学生验证码也是如此
问题是,如果我使用
white
主题而不是custom
并且不将任何自定义html放在<div id="studentcaptcha" or "teachcaptcha">...</div>
中,destroy()效果最好,但是当我使用custom
主题并放下时根本不起作用我自己的HTML都在div
上。有什么建议么?
最佳答案
我弄清楚了为什么Recaptcha.destroy()
不会破坏旧的验证码...这是因为destroy()
是为非自定义验证码主题设计的。
它的定义是:Recaptcha.widget&&("custom"!=Recaptcha.theme?Recaptcha.widget.innerHTML="":Recaptcha.widget.style.display="none",Recaptcha.widget=null)
,因此当使用custom
主题时,它不会完全删除验证码。
解决方案是编写自定义的destroy方法,该方法使用jQuery
(或JavaScript
)手动删除验证码的html小部件。
关于javascript - recaptcha.destroy()在自定义主题中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19140317/