我正在尝试创建一个字符串以传递给包含大量变量的PHP文件。 Javascript代码遍历一组变量 - 其名称对应于页面上表单中的复选框。如果已在下面的表单中检查了数组中变量的名称,那么它会将变量的名称添加到发布到PHP文件的字符串中。这是代码:
var datesStr = ["L2010L04L01", "L2010L04L02", "L2010L04L06", "L2011L01L07", "L2010L10L09", "L2010L07L09", "L2011L05L10"]; //etc. This is a sample; the list is much longer. var sendStr = ""; for (var i in datesStr) { if(document.swapOptions.datesStr[i].checked == true) { sendStr = sendStr+"&to"+i+"="+datesStr[i]; } }
但是由于某些原因,当我将变量放入document.swapOptions行时会出现问题。我也试过了,但它不起作用:
var datesStr = ["L2010L04L01", "L2010L04L02", "L2010L04L06", "L2011L01L07", "L2010L10L09", "L2010L07L09", "L2011L05L10"]; //etc. This is a sample; the list is much longer. var sendStr = ""; var intermedDatesStr = ""; for (var i in datesStr) { intermedDatesStr = document.swapOptions.datesStr[i]; if(intermedDatesStr.checked == true) { sendStr = sendStr+"&to"+i+"="+datesStr[i]; } }
但它也不起作用。我认为浏览器正在寻找名为“intermedDatesStr”的形式的对象。有没有办法引用保持变量值的对象?在这里的任何帮助将非常感谢!
谢谢, 本
答案 0 :(得分:1)
在动态访问属性时需要使用bracket notation,如下所示:
var datesStr = ["L2010L04L01", "L2010L04L02", "L2010L04L06", "L2011L01L07", "L2010L10L09", "L2010L07L09", "L2011L05L10"]; //etc. This is a sample; the list is much longer.
var sendStr = "";
var intermedDatesStr = "";
for (var i=0; i<datesStr.length; i++) {
if(document.swapOptions[datesStr[i]].checked == true) {
sendStr = sendStr+"&to"+i+"="+datesStr[i];
}
}
这访问了这样的属性:
document.swapOptions["L2010L04L01"]
//which is the same as:
document.swapOptions.L2010L04L01
另一个更改是使用正常的for
循环,for...in
循环不是迭代数组的正确方法,您将获得其他继承的属性,而不一定是您期望的顺序。