提问人:netrox 提问时间:12/23/2008 最后编辑:netrox 更新时间:12/24/2008 访问量:1242
JavaScript 无法调用数组中的元素
javascript cannot call an element in array
问:
好的,让我解释更多......目标是在选择时发生更改时选中该复选框。实际代码为:
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”关键字使其成为“this current element”,但它似乎不起作用,但可能是我使用了不正确的语法。
我所期望的是 onchange 事件,它应该触发它的参数,即“date[]”,但我认为 Javascript 应该知道它将使用 date[] 中的哪个元素,而不是显式地称其为 date[1] 等等。checkit 函数获取“date[]”名称并选中该 date[] 复选框。
顺便说一句,非常感谢您的补充答案(我学到了一些新东西!
答:
你到底想用这段代码做什么?
根据你的代码段(有一些语法错误),你正在选中一个复选框,然后调用一个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 />
它不起作用,因为(正如 dreas 所说)您的 HTML 代码有错误,并且您以与 javascript 语法冲突的方式命名变量。
输入的名称是 date[1],[ 和 ] 在 javascript 代码中具有特殊含义。
在此代码中:
document.forms[0].date.checked = true;
您尝试访问文档第一个表单 (document.forms[0]),然后尝试访问名为“日期”的字段,但没有任何字段。根据您的 HTML 标记,您有名为“date[1]”、“date[2]”和“date[3]”的字段。
但是你不能像这样访问它们:
document.forms[0].date[1].checked = true;
为什么?因为 date[1] 尝试用 1 索引日期,在这种情况下,你的日期不是一个数组。
如果你用引号括起来,你可以访问它:
document.forms[0]["date[1]"].checked = true;
请注意,现在“date[1]”用作字符串。
PHP 的语法是将某些内容放在数组中的下一个可用索引处。arr[] = something
Javascript 没有这种语法;如果要将某些内容放在数组中的下一个可用索引处,请改用。arr.push(something)
但是你所指的示例部分是 HTML,而不是 Javascript。Javascript 访问它,但表单字段本身是在 HTML 中创建的......因此,您必须给它起自己的名字,而不是自动递增的名称。
如果您通过 DOM 调用动态创建 HTML(例如,对于每个输入元素,、、、但这是生成HTML的另一种方法,并且有很多陷阱需要注意。document.createElement('input')
appendChild()
首先,您希望在 Javascript 中使用特定于 PHP 的功能。不,据我所知,没有这样的功能。
其次,我强烈建议不要使用像“date[1]”这样的 HTML 输入名称......这可能是合法的 HTML(我必须在一些浏览器中尝试以确保它被有效允许),但它几乎是 100% 维护周期中可能的错误来源。
我假设这段代码要么是为您自动生成的,要么您只想在编辑器中复制/粘贴。如果是前者,我会将自动生成代码中的元素命名为“date_1”并完成它。如果是后者,则可以在代码中保留数字(即,手动输入date_1到date_257),或使用 Javascript document.write 调用来更轻松地生成 HTML。如果真的没有其他方法,我只会做后者(document.write out HTML)。如果您谈论的是 10-25 个副本,那么手动处理它比使用 document.write 更不容易出现问题;如果您有超过 25 个这样的实例,那么自动化元素生成可能是有意义的。
评论