【问题标题】:ReCaptcha: "The bind parameter must be an element or id"ReCaptcha:“绑定参数必须是元素或 id”
【发布时间】:2018-03-21 07:40:30
【问题描述】:

ReCaptcha 已停止在我们的淘汰赛网站上工作。

我在控制台中收到以下错误:

Uncaught Error: The bind parameter must be an element or id
    at kr (recaptcha__en.js:369)
    at nr (recaptcha__en.js:373)
    at Object.or [as render] (recaptcha__en.js:374)
    at loadReCaptcha (KnockoutBindings.js:135)
    at KnockoutBindings.js:143

我有一个自定义绑定来处理 ReCaptcha。

 <div id="reCaptcha" data-bind="reCaptcha: {key: 'my-key', callback: reCaptchaResponse}"></div>

经办人:

ko.bindingHandlers.reCaptcha = {
    init: function (element, valueAccessor) {

        var val = ko.utils.unwrapObservable(valueAccessor()),
            key = ko.utils.unwrapObservable(val.key),
            callback = val.callback;                     

        function loadReCaptcha() {
            if (typeof grecaptcha !== "undefined") {
                grecaptcha.render(element.id, {
                    'sitekey': key,
                    'theme': 'light',
                    'callback': callback
                });
            }
            else {
                setTimeout(function () {
                    loadReCaptcha();
                }, 150);
            }
        }

        loadReCaptcha();
    }
};

这以前可以工作,但最近停止工作。

我已经检查过:

  • 密钥仍然有效
  • reCaptcha div 已加载且可见
  • 尝试更改 ID/使用另一个 div
  • 尝试传递元素而不是 id

谷歌搜索确切的错误“绑定参数必须是元素或 id”仅提供指向 recaptcha.js 文件中的行的链接。

我找不到有关错误实际含义或解决方法的任何信息。

我还在页面右下角收到一条消息“此站点密钥未启用隐形验证码。”但我相信这是 reCaptcha 未加载的副作用。

【问题讨论】:

    标签: javascript knockout.js recaptcha


    【解决方案1】:

    我遇到了完全相同的问题。事实证明,问题实际上是“数据绑定”属性。不知道为什么它“停止”工作,但我假设谷歌可能会引入一个名为“bind”的新属性。

    我更改了绑定以在元素内创建一个 div,从而确保该元素根本没有数据属性。

    如果您将绑定更改为此,它应该可以工作:

    ko.bindingHandlers.reCaptcha = {
        init: function (element, valueAccessor) {
    
            var val = ko.utils.unwrapObservable(valueAccessor()),
                key = ko.utils.unwrapObservable(val.key),
                callback = val.callback;
    
            function loadReCaptcha() {
                if (typeof grecaptcha !== "undefined") {
                    var $target = $('<div />').appendTo($(element));
                    grecaptcha.render($target[0], {
                        'sitekey': key,
                        'theme': 'light',
                        'callback': callback
                    });
                }
                else {
                    setTimeout(function () {
                        loadReCaptcha();
                    }, 150);
                }
            }
    
            loadReCaptcha();
        }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-19
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2019-05-12
      • 2021-11-14
      相关资源
      最近更新 更多