Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在表单提交时调用JS函数_Javascript_Facebook_Forms_Onsubmit - Fatal编程技术网

Javascript 在表单提交时调用JS函数

Javascript 在表单提交时调用JS函数,javascript,facebook,forms,onsubmit,Javascript,Facebook,Forms,Onsubmit,我已经创建了一个JS函数,当它包含标准HTML链接标记的“onclick”操作时,该函数可以正常执行,如下所示: <a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a> Line 2: Make sure Facebook Connect JS library is loaded Line 3: Checks to see if the current Facebook Co

我已经创建了一个JS函数,当它包含标准HTML链接标记的“onclick”操作时,该函数可以正常执行,如下所示:

<a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a>
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
该代码的作用如下:

<a href="#" onclick="return fb_CheckPermission('publish_stream');">test</a>
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函数以产生我想要的用户体验。提前感谢您的帮助

尝试将javascript调用放在您用于启动提交的输入上。

我认为基本上您的浏览器倾向于使用默认的验证表单(page.pl/method 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>

var returnFbChPermissionAndPreventDefaultAction=函数(){
//防止违约
if(event.preventDefault){
event.preventDefault();
} 
//特定于IE
valueOfreturn=fb_CheckPermission('publish_stream');
event.returnValue=返回值;
returnevent.returnValue;
}
您的“点击锚定”之所以有效,是因为在所有Facebook异步调用完成时,它不会更改您的页面(位置)

当您将同一函数附加到提交处理程序时,该函数会在Facebook stuff实际执行之前返回,并且不会返回“false”,从而导致表单在您希望的时间之前继续提交

您需要做的是在onSubmit函数的末尾返回“false”,以防止提交,并给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;
}

@帕特森-我不太明白你的意思。您的意思是将其添加为表单提交按钮的onclick操作吗?我更喜欢在提交时这样做,以防用户点击表单字段之一的return来提交表单,我认为这不会触发onclick操作-正确吗?@RusselC-是。在我的测试中,如果用户从其中一个字段点击return,javascript仍应激活。在阅读了Marco的回答后,我同意你的问题不是javascript是否被调用,而是你没有立即知道结果。@Marko-你说的有道理,但似乎不起作用。我更新了标记中的onsubmit操作,使其包含“return false;”在调用JS函数之后,我更新了我的JS函数,几乎在任何地方都提交false,只是为了看看我是否可以停止表单提交。不幸的是,无论我做什么,表格似乎都要提交。是否有办法更改JS函数,使其在继续之前等待每个异步调用?我想这可能有助于解决我的问题。我不知道还有什么可以尝试。我想到一件事:代码中可能有错误。这也将终止脚本并允许继续提交。如果您使用的是Firefox/Firebug,请将“console.log(“…”)放在“return false”之前,看看它是否真的贯穿到return语句中。好头脑的人都是这样想的。基本上,我决定在每个新元素之后使用警报语句从头开始重新构建函数,以确定触发的顺序以及问题发生的位置。我以为我已经解决了这个问题,但在我们的一些表格上似乎失败了。你的建议让我走上了正确的方向,所以非常感谢你的帮助!我刚刚想出了解决办法。看起来我将一些表单上的submit按钮命名为“submit”,这使得JS无法处理submit()操作。我终于在这里找到了解决办法