【问题标题】:Does submit() function has a callback?submit() 函数是否有回调?
【发布时间】:2010-06-17 19:18:29
【问题描述】:

我有这个代码,以及一个提交到框架的文件上传表单:

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

问题:Webkit 浏览器似乎在提交表单之前或在提交表单的那一刻将“MyCookie”更新为“value_2”,因此发送了错误的 cookie 值。 我想在提交表单后立即将 cookie 值更改为“value_2”,以便 cookie 准备好接受另一个请求。

以下代码运行良好,但我不认为使用 timeout() 是最好的解决方案。也许还有其他方法可以解决这个问题?

setMyCookie('name','value_1');
$('.myform').submit();
setTimeout(function(){setMyCookie('name',value_2);},100);

谢谢。

【问题讨论】:

  • 如果我理解正确的话,我认为这个问题与您对问题的描述不符。这对我来说听起来像是一个 WebKit 错误,因为 JavaScript 执行应该在提交表单时停止,就像 David 说的那样。
  • 我将表单提交到一个框架,因此 javascript 执行不会停止。
  • 这不是使用类似延迟技术的可靠方法(调用 setTimeout())

标签: javascript jquery webkit callback submit


【解决方案1】:

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

例外情况是如果您将表单提交到框架,在这种情况下会触发 onload 事件。

【讨论】:

  • 我确实将表单提交到框架。抱歉,忘记提及了。
  • 然后,正如我所说,onload 事件将触发。
  • 好的,我明白了,但我使用的是 $('#frame).load(function(){}) 而不是 'onload' 来处理响应。这是一个文件提交表单,所以如果我将 setMyCookie('name',value_2) 放在 load() 函数中,我将不得不等到文件上传完成并返回响应。我需要在提交表单后立即更改 cookie 的值。在这种情况下可能吗?
【解决方案2】:

是的,你可以。 See here.

【讨论】:

    【解决方案3】:

    您必须使用 AJAX 来完成此操作。否则,表单将被提交,并且您的函数将执行的其余 JavaScript 将被忽略,因为页面已重新加载。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2023-03-07
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2014-03-02
      • 2020-02-22
      相关资源
      最近更新 更多