我正在尝试在网站上实现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函数永远不会被调用。(然而,除此之外,它的行为几乎是正常的——当我点击确认时,弹出窗口"You have registered using abc"会显示并消失——但其他什么都没有发生。
如果我在没有这个参数的情况下将自定义字段(用户名)留空,Facebook会要求我填写它。如果我在有这个参数的条件下将其留空,则不会调用validate函数,也不会显示任何错误。无论哪种方式,本应始终根据此表单显示的TOS错误都不会显示。
类似的问题涉及网站URL与应用程序的URL不匹配。在这种情况下,情况并非如此。
为了澄清域,我使用的域是"imlocalhost",它无法通过互联网访问。我不认为这是一个问题,因为如果没有onvalidate,注册表就可以工作,我实现的登录系统也可以工作。然而,有了onvalidate,注册表就完全停止工作了。
onvalidate="validate()"
onvalidate="validate"您只是在调用一个字符串。。。
您需要括号来调用函数