【问题标题】:Problem disabling/enabling multiple form elements using javascript使用 javascript 禁用/启用多个表单元素的问题
【发布时间】:2010-09-18 10:04:43
【问题描述】:

我正在尝试使用 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;

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

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

我确定我在某个地方犯了一个错误,但是由于单行代码可以正常工作,我不知道该去哪里找……这让我发疯了!

拜托,我真的需要一些帮助。

【问题讨论】:

    标签: javascript forms checkbox


    【解决方案1】:

    我只是让它发挥作用,但我认为这是一个非常严重的错误。

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

    我解决了这个问题:

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

    在尝试操作元素之前。

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

    感谢您的宝贵时间。

    【讨论】:

    • 当问这样的问题时,包含 HTML 通常是个好主意。仅查看 Javascript 无法确定错误在哪里。
    • 你是对的。下次我也会发布 HTML。不过,我希望没有下一次;)
    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多