使用javascript禁用/启用多个表单元素时出现问题

时间:2010-09-18 10:04:44

标签: javascript forms checkbox

我正在尝试使用javascript禁用/启用HTML页面的多个表单元素。我有一个包含许多字段的表单,表单的每一行都有一个复选框,用于启用/禁用该行上的元素。

问题是,只有前两个表单元素被禁用(无论顺序如何)。之后,函数中剩余的javascript代码将不再执行。

这是代码(它是每个复选框的onChange属性调用的函数的一部分):

document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_quantity")[0].disabled = !theBox.checked;
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_description")[0].disabled = !theBox.checked;
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_price")[0].disabled = !theBox.checked;
document.getElementsByName(prefix + "fase" + phaseNumber + "_" + objectNumber + "_language")[0].disabled = !theBox.checked;

每个表单元素都有一个不同的(唯一的)名称,单行代码工作正常......直到你把它们放在一起。 例如:在上面的代码中,“数量”和“描述”字段将被禁用/启用,但“价格”和“语言”不会。

如果我改变了行的顺序,前两个总是被执行,无论如何。 然后每行代码都不起作用;它就像评论一样。我甚至提出了一些警告来尝试调试,但如果我在上面的代码之后插入它们,它们就会被忽略(根本没有显示任何对话框)。元素名称是正确的。

我确定我在某个地方犯了错误,但由于单行代码正在运行,我不知道在哪里看......这让我疯了!

拜托,我真的可以帮忙。

1 个答案:

答案 0 :(得分:0)

我刚刚开始工作,正如我想的那样,这是一个非常糟糕的错误。

问题是,并非HTML中的每个表单行都包含所有这4个字段。所以,基本上,我试图访问一个null对象的属性。

我把它解决了:

if( document.getElementById(id) != null )

在尝试操纵元素之前

有时当你匆忙时,你最终会忽略一些非常基本的东西......

感谢您的时间。