0

我想知道如何使用标签名称检索元素的类型,我正在 HTML 表单上创建代码。有所有类型的 HTML 输入元素(文本字段、按钮、日期选择器)。

我想要的是,如果用户从下拉列表中选择一个选项,请禁用复选框。但是复选框是使用 PHP 循环生成的,并且我还在复选框名称中传递了 id,所以我不能使用:

document.getElementsByName('checkbox');

我的复选框的名称是“复选框”,所以我尝试使用:

document.getElementsByTagName('input');

我禁用了复选框,但这禁用了页面上的所有输入元素。有什么解决办法吗?我如何将 type 属性用作复选框并禁用复选框:

function  disabler()
{  
     checkboxes = document.getElementsByTagName('input');
     if(checkboxes.type='checkbox')
     {
        for(var i=1, n=checkboxes.length;i<n;i++)
        {
            checkboxes[i].disabled = true;//here i want to disable only the checkbox on page 
        }
 }
}
4

3 回答 3

3

您正在使用赋值运算符= NOT comparison ==。替换此行

if(checkboxes.type='checkbox')

if(checkboxes.type == 'checkbox')

或严格的比较运算符===(也比较变量类型,例如"0" === 0为假但"0" == 0为真)

if(checkboxes.type === 'checkbox')

此外,您正在尝试访问由返回的集合type的属性。要访问特定元素,请参考它是一个数组getElementsByTagNamecheckboxes

if(checkboxes[0].type === 'checkbox') //accesses first checkbox element

要遍历所有元素,同时检查每个元素,如果它是一个复选框,请执行此操作

for(var i=0; i < checkboxes.length; i++)
    {
        if(checkboxes[i].type === 'checkbox') {
            checkboxes[i].disabled = true;
        }
    }

这是一个给你的示例小提琴

于 2013-10-26T11:53:15.877 回答
2

在 JavaScript 中,=是一个赋值运算符。=====是相等运算符(分别为松散和严格)。所以:

if(checkboxes.type=='checkbox')  // Loose, does type conversion (not relevant here)

或者

if(checkboxes.type==='checkbox') // Strict, no type conversion (not relevant here)
于 2013-10-26T11:53:18.290 回答
2

checkboxes是一个节点列表,而不是单个元素。您需要对以下内容进行测试checkboxes[i]

function  disabler()
{  
    checkboxes = document.getElementsByTagName('input');
        for(var i=1, n=checkboxes.length;i<n;i++)
        {
            if (checkboxes[i].type == 'checkbox') {
                checkboxes[i].disabled = true;
            }
        }
}  
于 2013-10-26T11:55:03.293 回答