3

我正在考虑在我的一个网站表单上使用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并且文本被报告为空字符串

4

1 回答 1

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();
}
于 2013-11-12T15:34:18.693 回答