2017-09-15 67 views
0

我有一个recaptcha和注册表单。这里有一个处理程序的简单版本:如何确保重新验证码js文件在提交表单之前已被加载?

//my_script.js 

    document.getElementById("my_form").onsubmit = function(e) { 
    e.preventDefault(); 
    grecaptcha.execute(); 
    var grecap_resp = grecaptcha.getResponse(); 
    if (grecap_resp.length !== 0) { 

而且js文件:

<script src="my_script.js"></script> 
<script src="https://www.google.com/recaptcha/api.js" async defer></script> 

有时候,我不得不两次单击提交按钮。 我相信这是由于我点击按钮时“recaptcha/api.js”还没有加载。 正如我所看到的,当它被加载时,一切运行良好。

我该如何解决这个问题?

回答

0

作为the docs say,你可以传递一个onload参数与函数的名字,当被加载时被调用:

<script src="my_script.js"></script> 
<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaLoaded&render=explicit" async defer></script> 

而且你my_script.js内:

window.recaptchaLoaded = function() { // "window..." so is defined on the global scope 
    console.log("Yay! captcha loaded"); // Here you should add your logic to show/enable the button that is disabled/hidden by default. 
} 
+0

但我有**文件.getElementById(“my_form”)。onsubmit ** – Akira

+0

最初我应该禁用提交按钮吗?然后启用它? – Akira

+0

@Akira正确。你也可以添加一个标志,因为尽管你给按钮添加了一个'disabled'属性,它仍然会抛出'click'事件,所以在你的'onsubmit'中你应该检查那个布尔值,告诉它captcha是否被加载或者不能继续你的逻辑。例如,创建一个'captchaLoaded'变量,并在验证码加载时将其设置为'true'。这只是一个polyfill,因为几乎所有的浏览器都会禁用被禁用元素上的'click'事件,但似乎并不是标准的事情,所以也许有一个浏览器仍然会将它抛出禁用的元素。 –

相关问题