我已经创建了一个JS函数时,它的包括在标准的HTML链接标记的的“onClick”动作如下,其执行精细:

<a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a>

不过,我真的想使用此功能是一种形式的“的onsubmit”行动,但是当我把它作为如下功能似乎不再被执行:

<form action="page.pl" id="disable-submit" name="status-form" method="POST" onsubmit="return fb_CheckPermission('publish_stream');">

什么是“fb_CheckPermission()” JS功能基本上做的是使用Facebook Connect来检查,以确保用户给了我们一个特定的权限,如果没有它告诉Facebook Connect来提示用户设置权限。下面是JS功能的代码:

1. function fb_checkPermission(permission) {
2.  FB.ensureInit(function() {
3.      FB.Facebook.apiClient.users_hasAppPermission(permission, function (hasPermissions) {
4.          if(!hasPermissions){
5.              FB.Connect.showPermissionDialog(permission,function (status){
6.                  if(!status) {
7.                      if(permission == 'offline_access') {
8.                          // save session
9.                      }                       
10.                 }
11.             });
12.         }
13.     });
14. });
15.}

什么这个代码如下所示:

Line 2: Make sure Facebook Connect JS library is loaded
Line 3: Checks to see if the current Facebook Connect user has granted a specific permission
Line 5: If the permission hasn't been granted then prompt the user with the permission dialog
Line 7: In the case of the 'offline_access' permission save the session key once granted

我想实现的用户体验,当用户提交表单,我会检查,看看他们是否有提交表单前给予特定的权限,如果没有提示他们的权限。如果用户已经授予权限的形式应该只是提交。对于提示的形式应提交后,他们要么选择授予的权限,或者如果拒绝,我相信fb_checkPermission()JS函数正确处理现在请求谁的用户。什么我不知道的,如果有某种JavaScript的问题与如何工作表单提交。

正如我所提到的,这个JS功能完美的作品作为一个onclick动作,但无法作为的onsubmit动作,所以我敢肯定这是与JavaScript的对待如何的onsubmit行动。

我被堵,所以我真的很感谢你搞清楚如何改变JS功能产生我所期望的用户体验帮助。在此先感谢您的帮助!

有帮助吗?

解决方案

您“点击锚”成功运作的原因是因为它不会改变你的页面(位置),而所有的Facebook的异步调用的完成。

当您将同样的功能,以提交处理程序函数返回前的Facebook的东西被实际执行,它也没有返回“假”造成的形式早于你想让它与提交继续。

您需要做的就是回归“假”在你的onsubmit功能,防止提交,并给时间给Facebook的东西到结束的结束,然后在地方手动提交表格,您希望它通过调用提交:

document.getElementById('disable-submit').submit();

(该处理程序将不会被如果submittion从脚本触发调用。)

不幸的是,我没有Facebook的SDK在手,所以我不能写,我敢肯定工程100%的代码,但它的东西沿着这些路线:

function onSubmit () {
    doStuffAsynchronously(function () {
        if (everythingIsOK) {
            // proceed with submission
            document.getElementById('formId').submit();
        }
    });

    return false;
}

其他提示

尝试把javascript调用您使用启动提交输入。

我觉得基本上,你的浏览器倾向于使用默认的验证形式(page.pl / POST方法),而不是做你认为它 尝试这种

<form action="page.pl" id="disable-submit" name="status-form"
      method="POST" onsubmit="returnFbChPermissionAndPreventDefaultAction();">
    <script type="text/javascript">
        var returnFbChPermissionAndPreventDefaultAction = function(){ 
           //prevent default
           if (event.preventDefault) { 
               event.preventDefault(); 
           } 

           //specific for IE
           valueOfreturn = fb_CheckPermission('publish_stream');
           event.returnValue = valueOfreturn;
           return event.returnValue ; 
        }
    </script>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top