【发布时间】:2009-11-17 00:04:57
【问题描述】:
目前我的 JavaScript 代码中存在竞争条件。我试图用这段代码做的是转换所有复选框,这些复选框是“复选框”类的一部分,并且没有被检查到值为零的文本框中。目前,当您发布未选中的复选框时,它不会出现在 $_POST 数据中。但是,我需要知道这些特定复选框的所有值,无论是真还是假。
我的代码在这里: 代码:
function checkboxConvert() {
var chkBxs = $$('.checkbox');
for (var i = 0; i < chkBxs.length; i++) {
if (chkBxs[i].checked == false) {
chkBxs[i].type = 'textbox';
chkBxs[i].value = '0';
}
}
setTimeout("document.productForm.submit();",1000);
}
现在我遇到的问题是,当我尝试提交此表单时,最近更改的文本框的值不会出现在 $_POST 数据中。因此,正如您在上面看到的,我将页面提交推迟了 1 秒,然后我就拥有了所有可用的数据。然而,随着时间的推移,我的数据集变得越来越大,1 秒可能已经不够了。我认为这是一种竞争条件,只有在所有复选框都已转换并且它们具有新值之后,我才需要找出某种运行代码的方法。我从一开始就认为这是不必要的,但由于某种原因,它试图同时运行这两个部分,并且在我有适当的值之前我无法提交。
非常感谢任何帮助!
【问题讨论】:
-
DOM 操作很慢。我的猜测是文本框转换的速度比您的时间限制慢,正如您可能已经想到的那样。
-
FWIW:根据 MSDN,一旦将
input元素的type添加到文档中(在 Internet Explorer 中),您将无法更改它。因此,您可能需要重新考虑整个策略...(参考:msdn.microsoft.com/en-us/library/ms534700.aspx)
标签: javascript html forms dom