10

我正在尝试在网站上实现 Facebook 注册。如果没有 onvalidate 参数,一切都会按预期工作,但是当包含它时,一切似乎都崩溃了(没有抛出错误,表单什么也不做)。

这是我的代码:

<center>
    <fb:registration redirect-uri="http://im.localhost/register"
    fields='[{"name":"name"},{"name":"username","description":"Website Username","type":"text"},{"name":"email"},{"name":"password","view":"not_prefilled"},{"name":"captcha","view":"not_prefilled"},{"name":"tos","type":"checkbox","description":"I accept the Terms of Service"}]' onvalidate='validate'>
    </fb:registration>
</center>
<script> 
function validate(form) {
    console.log('Validation');
    errors = {};
    errors.tos = "You must accept the terms of service";
    return errors;
}
</script>
<!-- at end of page: -->
<script>
    // ...
    FB.init({
        appId: '<?php echo IM_Facebook::getAppIDStatically(); ?>',
        channelUrl: '<?php echo $this->serverUrl().$this->baseUrl('/xsrd.html'); ?>',
        status: true,
        cookie: true,
        xfbml: true
    });
    // ...
</script>

console.log 函数永远不会在点击表单的提交按钮时被调用。(但是,否则它的行为几乎正常 - 当我单击确认时,弹出“您已使用 abc 注册”出现并消失 - 但没有其他任何反应。

如果我在没有此参数的情况下将自定义字段(用户名)留空,Facebook 会要求我填写它。如果我将此参数留空,则不会调用验证函数并且不会显示任何错误。无论哪种方式,应该始终根据此表单显示的 TOS 错误永远不会出现。

类似问题的问题涉及网站 URL 与应用程序的 URL 不匹配。在这种情况下,情况并非如此。

为了澄清域,我使用的是无法通过 Internet 访问的域“im.localhost”。我不认为这是一个问题,因为没有 onvalidate 注册表工作,并且我已经实施的登录系统工作。但是,使用 onvalidate 后,注册表将完全失效。

4

1 回答 1

1
  onvalidate="validate()"

onvalidate="validate" 你只是在调用一个字符串......

你需要括号来调用一个函数

于 2013-12-01T03:06:52.117 回答