我正在考虑使用vouchsafe小部件作为我的某个网站表单上的reCAPTCHA的替代。
小部件将元素注入DOM,包括
<a id="vouchsafe-button" class="" href="javascript:void(0)"> ...
<span id="vouchsafe-button-text-top">Click to Validate</span>
当用户执行所需操作(在生成的图形元素上绘制一条线)时,上面的两行将更改为:
<a id="vouchsafe-button" class="vouchsafe-path-data-saved" href="javascript:void(0)"> ...
<span id="vouchsafe-button-text-top">Path Data Saved</span>
Vouchsafe本身有一些关于小部件的PHP使用的文档,但没有关于处理客户端挑战和响应的javascript。
我想在此阶段做的就是记录#vouchsafe-button
课程的变化以及#vouchsafe-button-text-top
的文字变化。我尝试将$("#vouchsafe-button").attr("class")
和$("#vouchsafe-button-text-top").text()
写入控制台日志,但该类报告为undefined
,文本报告为空字符串
答案 0 :(得分:0)
这个答案解决了问题的标题(和@ RoryMcCrossan的回答,这是为了猜测我的初衷是在元素发生变化时引发事件),尽管它本身并没有完全回答这个问题。
vouchsafe插件小部件将大量元素注入到DOM中(包括我的问题中描述的按钮链接),其中一些元素在用户执行所需操作时更改内容。
由于jQuery .change
事件不可用于非输入元素和隐藏的输入元素 - 并且缺少稳定的跨浏览器观察者的突变事件 - 唯一真正可行的跨浏览器解决方案是使用setInterval
,寻找适当元素的变化(我选择了#vouchsafe-chellenge-response
,这似乎比我原来的选择更合适。)
我的最终解决方案(使用.load
方法处理任何所需的验证)是:
watchforchallenge=setInterval(function(){
resp = $("#vouchsafe-challenge-response");
if (resp.val()) {
$("#unbanresponse").load("/forbidden/functions/unban.php",removecaptcha());
clearInterval(watchforchallenge);
}
}, 500);
function removecaptcha(){
$("a#vouchsafe-button").slideUp();
}