2010-09-18 43 views
0

我试图禁用/启用使用javascript的HTML页面的多个表单元素。我有一个包含许多字段的表单,表单的每一行都有一个复选框来启用/禁用行中的元素。使用javascript禁用/启用多个表单元素的问题

问题是,只有前两个表单元素被禁用(不管顺序)。之后,该函数中剩余的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; 

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

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

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

请,我真的可以使用一些帮助。

回答

0

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

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

我解决它通过把:

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

试图操纵元素之前。

有时候当你在赶时间,你最终会忽略一些很基本的东西...

谢谢您的时间。

+0

当问这样的问题时,通常包含HTML是一个好主意。只看JavaScript,就没有办法知道错误在哪里。 – Saul 2010-09-18 13:42:32

+0

你说得对。下次我也会发布HTML。尽管如此,我希望下次不会;) – Valerio 2010-09-18 14:00:34