PHPjQuery:recaptcha的问题

PHPjQuery:recaptcha的问题,php,jquery,recaptcha,Php,Jquery,Recaptcha,我有一个HTML文件,有两个表单,一个用于注册,另一个用于登录。 因此,当我注意到recaptcha不允许每页放置超过一个captcha时,我认为我可以只显示注册表或登录表单的captcha(如果所有字段都为空)。所以,我试着从登记表开始,但它不起作用 HTML: 。。。 ... JQuery: $(document).ready( function() { $("#username_reg").change( function() { if ($('#userna

我有一个HTML文件,有两个表单,一个用于注册,另一个用于登录。 因此,当我注意到recaptcha不允许每页放置超过一个captcha时,我认为我可以只显示注册表或登录表单的captcha(如果所有字段都为空)。所以,我试着从登记表开始,但它不起作用

HTML:

。。。
...
JQuery:

$(document).ready(
 function()
 {
  $("#username_reg").change(
   function()
   {
    if ($('#username_reg').val()!='' && 
        $('#email_reg').val()!='' && 
        $('#password_reg').val()!='' &&
        $('#cpassword_reg').val()!='')
    {
     $('#captcha_reg').html('<?php require_once("recaptchalib.php");echo recaptcha_get_html("mypubkey"); ?>'
     );
    }
   }
  );
  $("#email_reg").change(
   //same code as first
  );
  $("#password_reg").change(
   //same code as first
  );
  $("#cpassword_reg").change(
   //same code as first
  );
 }
);
$(document).ready(function() {
    // This will move the `#captcha_reg` span and its contents to the `#login_container` div when the DOM is ready.
    $('#login_container').append($('#captcha_reg'));
});
$(文档)。准备好了吗(
函数()
{
$(“#用户名_注册”)。更改(
函数()
{
如果($('#username_reg').val()!='&&
$('#email_reg').val()!=''&&
$('#password_reg').val()!=''&&
$('#cpassword_reg').val()!='')
{
$('captcha_reg').html('
);
}
}
);
$(“#电子邮件注册”)。更改(
//和第一个代码相同
);
$(“#密码注册”)。更改(
//和第一个代码相同
);
$(“#注册会计师密码注册”)。更改(
//和第一个代码相同
);
}
);

我知道JQuery代码并没有得到如此优化(从内存资源的角度来看),但我没有想到任何其他方法来实现这一点。有人能帮我吗?

我曾经做过类似的事情。您要做的是将一个隐藏的模板元素转换为reCaptcha小部件,然后当用户切换到查看相应部分时,将整个小部件移动到适当的表单
div
容器中。在向该部分中的用户显示验证码质询之前,您可以在此时清除/重置字段,或调用以获取新的验证码质询。下面是一个例子:

有关
append()
操作,请参阅jQuery API文档:

HTML:


但是要将小部件移动到div容器中,我必须在JQuery中执行
$('switched#from').html('')
$('switched#to').html('reCaptcha php code')
,但是当我将reCaptcha php代码放在JQuery中时,它不起作用。不,你不会。我将更新我的答案,向您展示如何操作。recaptcha PHP代码失败的原因是jQuery不运行PHP代码,而是运行JavaScript。因此,您需要从PHP/HTML视图脚本中运行recaptcha PHP代码,并在用户执行所需操作(即单击login vs register)时使用jQuery将呈现元素移动到正确的容器中,但recaptcha不允许您显示两个小部件(如果其中一个小部件带有
display:none
,也可以考虑).我建议您阅读jQuery中DOM操作的文档。为要附加的对象指定现有元素时,它会移动该元素。
...
<div id="login_container">
<form> 
 <input type="text" id="username_reg"></input>
 <input type="text" id="email_reg"></input>
 <input type="password" id="password_reg"></input>
 <input type="password" id="cpassword_reg"></input>
</form></div>
<div id="captcha_template" style="display:none;">
 <span id="captcha_reg">
       <?php 
           require_once("recaptchalib.php");
           echo recaptcha_get_html("mypubkey"); 
       ?>
 </span>
</div>
...
$(document).ready(function() {
    // This will move the `#captcha_reg` span and its contents to the `#login_container` div when the DOM is ready.
    $('#login_container').append($('#captcha_reg'));
});