上表中调用JS功能提交
-
25-09-2019 - |
题
我已经创建了一个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>