Javascript 在表单提交时调用JS函数
我已经创建了一个JS函数,当它包含标准HTML链接标记的“onclick”操作时,该函数可以正常执行,如下所示: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
<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()操作。我终于在这里找到了解决办法