【问题标题】:Race-condition when submitting form with jQuery使用 jQuery 提交表单时的竞争条件
【发布时间】:2012-07-12 01:35:34
【问题描述】:

为了能够使用 jQuery 提交表单(非 ajax),我必须进行 hack。

如果我不执行if 声明,表单将不会提交:

这行得通(表单被提交)

$("#myHiddenFieldID").val(JSON.stringify(jsObject));
var x = $("#myHiddenFieldID").val();
if (x) {
    $("#myHiddenForm").submit();
}

这不起作用(表单未提交字段保持为空)

$("#myHiddenFieldID").val(JSON.stringify(jsObject));
var x = $("#myHiddenFieldID").val();
// I used to put an alert here, which was shown __before__ the text appeared in the text field???!!! 
$("#myHiddenForm").submit();

我不明白,为什么我必须在这里阅读文本字段的内容...

【问题讨论】:

  • 这段代码在哪里?我认为在某种 onclick 处理程序中?这也是在$(document).ready(function() { }); 块内吗?
  • @JonTaylor 似乎是正确的。你是不是意外提交了表单。看看控制台有没有错误?
  • 发布最小的 jsfiddle 来重现它
  • 也许这段代码被执行了两次,在这种情况下添加 if(x) 语句可以防止第一次 - 错误 - 运行。

标签: javascript jquery html json forms


【解决方案1】:

由于hoisting,赋值语句在值传递到文本字段之前执行:

var x = $("#myHiddenFieldID").val();
$("#myHiddenFieldID").val(JSON.stringify(jsObject));
$("#myHiddenForm").submit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2011-12-12
    • 2019-02-10
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多