submit()函数有回调函数吗?

4

我有这段代码和一个文件上传表单,该表单被提交到一个框架中:

setMyCookie('name','value_1');
$('.myform').submit();
setMyCookie('name','value_2');

问题:Webkit浏览器似乎在表单提交之前或在提交时立即使用'value_2'更新'MyCookie',因此错误的cookie值随其发送。我希望在表单提交后立即将cookie值更改为'value_2',以便准备好另一个请求。
以下代码可以正常工作,但我认为使用timeout()不是最佳解决方案。也许还有其他方法来解决这个问题?
setMyCookie('name','value_1');
$('.myform').submit();
setTimeout(function(){setMyCookie('name',value_2);},100);

谢谢。

如果我理解正确的话,我认为这个问题与你描述的问题不符。在我看来,这听起来像是一个 WebKit 的 bug,因为 JavaScript 执行应该会在提交表单时停止,就像 David 说的那样。 - Marcel Korpel
我将表单提交到一个框架,这样JavaScript的执行就不会停止。 - ababa
那不是一种可靠的方式,使用延迟技术(如调用setTimeout()函数)。 - Kevin Le - Khnle
3个回答

3

不可以。提交表单会加载一个全新的页面,这通常会结束当前脚本的执行上下文。

唯一的例外是,如果您将表单提交到一个框架中,则会触发onload事件。


我将表单提交到一个框架中。抱歉,之前忘记提到了。 - ababa
然后,就像我说的那样,会触发一个onload事件。 - Quentin
好的,我明白了,但是我使用$('#frame).load(function(){})来处理响应,而不是'onload'。这是一个文件提交表单,如果我在load()函数中放置setMyCookie('name',value_2),那么我必须等到文件上传完成并收到响应才能更改cookie的值。我需要在表单提交后立即更改cookie的值。在这种情况下可行吗? - ababa

0

0
你需要使用AJAX来实现这个功能。否则,表单会被提交,你的函数要执行的JavaScript代码将被忽略,因为页面会重新加载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接