目前我的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