好的,让我解释一下......目标是勾选复选框,如果选择有更改。实际代码是:
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 []复选框。
顺便说一下,非常感谢补充答案(我学到了新的东西!)答案 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个这样的实例,那么也许就可以自动生成元素。