目前我的JavaScript代码中存在竞争条件。我正在尝试使用此代码将所有复选框都转换为“复选框”类的一部分,并且不会将其复选到值为零的文本框中。目前,当您发布未选中的复选框时,它不会出现在$_POST
数据中。不过,我需要知道这些特定复选框的所有值是true还是false。如何确保在发布前对表单DOM的更改已完成?
我的代码是在这里: 代码:
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操作很慢。我的猜测是,文本框转换发生的速度比您的时间限制要慢,正如您可能已经想到的那样。 – 2009-11-16 15:50:13
FWIW:根据MSDN,一旦添加到文档中(在Internet Explorer中),就不能更改“输入”元素的“类型”。所以你可能想重新考虑这整个策略......(参考:http://msdn.microsoft.com/en-us/library/ms534700.aspx) – Shog9 2009-11-16 16:01:11