javascript无法调用数组中的元素

时间:2008-12-23 06:59:28

标签: javascript arrays

好的,让我解释一下......目标是勾选复选框,如果选择有更改。实际代码是:

function checkit(date)
{
  document.forms[0].date.checked = true;
}


<input type="checkbox" name="date[]" value="2008-08-14">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

  <input type="checkbox" name="date[]" value="2008-08-15">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

<input type="checkbox" name="date[]" value="2008-08-16">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

在PHP中,如果它看到带有[]的变量,它会自动创建一个数组。在Javascript中,我预计Javascript会识别[]并基于当前元素执行。例如,如果我在第二个复选框中选择一个值,它应该触发一个事件来检查该元素框。我不想将变量命名为date1,date2,date3,date4 ......我希望这可以澄清更多。我知道我错过了一些东西......我尝试使用“this”关键字使其成为“当前元素”,但它似乎不起作用,但可能是因为我使用了不正确的语法。

我期望的是onchange事件,它应该触发它的参数“date []”但是我会假设Javascript应该知道它将使用date []中的哪个元素而不是明确地称它为date [1]和等等。 checkit函数获取“date []”名称并检查date []复选框。

顺便说一下,非常感谢补充答案(我学到了新的东西!)

4 个答案:

答案 0 :(得分:2)

它不起作用,因为(作为dreas said)您的HTML代码有错误,并且您以与javascript语法冲突的方式命名变量。

输入的名称为日期[1] [] 在javascript代码中具有特殊含义。

在此代码中:

document.forms[0].date.checked = true;

您正尝试访问文档的第一个表单(document.forms [0]),然后尝试访问名为 date 的字段,但没有任何字段。根据您的HTML标记,您有“date [1]”,“date [2]”和“date [3]”字段。

但你无法访问他们是这样的:

document.forms[0].date[1].checked = true;

为什么呢?由于日期[1] 会尝试使用 1 日期编制索引,在这种情况下,日期不是阵列。

如果您将包含在引号中,可以访问

document.forms[0]["date[1]"].checked = true;

请注意,现在“date [1]”用作字符串。

答案 1 :(得分:1)

你到底想用这段代码做什么?

根据你的代码(有一些语法错误),你正在检查一个复选框,然后调用一个js函数,它将再次检查复选框......?

你到底想要达到什么目的?

试试这段代码:

function checkit(date)
   {
    var date = document.getElementById(date);
    date.checked = true;
   }
<input type="checkbox" id="date[1]" value="2008-08-14" onchange="checkit('date[1]')");/>Aug 14, 2008<br /> 
<input type="checkbox" id="date[2]" value="2008-08-14" onchange="checkit('date[2]')");/>Aug 14, 2008<br /> 
<input type="checkbox" id="date[3]" value="2008-08-14" onchange="checkit('date[3]')");/>Aug 14, 2008<br /> 

答案 2 :(得分:0)

PHP的语法为arr[] = something,可以将某些东西放在数组的下一个可用索引中。

Javascript没有那种语法;如果你想在数组中的下一个可用索引上添加一些内容,请改用arr.push(something)

但您所引用的示例部分是HTML格式,而不是Javascript格式。 Javascript访问它,但表单字段本身是用HTML创建的......所以你必须给它自己的名字而不是自动增加的名字。

如果要通过DOM调用动态创建HTML(例如,对于每个输入元素document.createElement('input'),分配属性,然后将appendChild()分配给主窗体),则可以自动命名表单字段。 ..但这是另一种生成HTML&amp;的方法。有一堆陷阱需要注意。

答案 3 :(得分:0)

首先,您希望在Javascript中使用特定于PHP的功能。不,据我所知,目前还没有这样的功能。

其次,我强烈建议不要使用HTML输入名称,例如“date [1]”... 可能是合法的HTML(我必须在几个浏览器中尝试确保它是有效的允许),但几乎100%可能是维护周期中的错误来源。

我假设这个代码是为您自动生成的,或者您只是想在编辑器中进行blok并复制/粘贴。如果它是前者,我会在autogen代码中将元素命名为“date_1”并完成它。如果是后者,那么您可以在代码中维护数字(即,手动输入date_1到date_257)或使用Javascript document.write调用来轻松生成HTML。如果没有别的办法,我只会做后者(document.write out HTML)。如果您正在谈论10-25份副本,那么手动处理此方法比使用document.write更不容易出现问题。如果你有超过25个这样的实例,那么也许就可以自动生成元素。