为什么我可以'不要使用xx[this.index].style.display?它's说“;无法读取属性

why i can't use xx[this.index].style.display? it's said "Cannot read property 'style' of undefinedbtn"

本文关键字:display 属性 读取 style index 我可以 xx 为什么 this      更新时间:2023-09-26

我想让xx[this.index]在一个循环中,每个循环都有一个索引,然后当我点击其中的一个按钮时,按钮的背景会变成黄色&div块将同时更改单词。为什么它不起作用?我看到其他人使用这种方式效果很好。我该怎么办?非常感谢!

这是我的JSFiddle:http://jsfiddle.net/QCxwr/7

 window.onload=function()
    {
        var btn = document.getElementsByTagName('input');
        var div = document.getElementsByName('div');
        for(var i=0;i<btn.length;i++) {
            btn[i].index = i;
            btn[i].onclick=function() {
                for(var i=0;i<btn.length;i++) {
                    btn[i].className = '';
                    div[i].style.display='none';
                }
                this.className = 'active';
                div[this.index].style.display = 'block';
            };
        }
    };

请查找更新的javascript代码。当您使用"getElementsByName"进行提取时,DIV数组为0。

window.onload=function()
        {
            var btn = document.getElementsByTagName('input');
            var div = document.getElementsByTagName('div');
            for(var i=0;i<btn.length;i++) {
                btn[i].index = i;alert
                btn[i].onclick=function() {                
                    for(var i=0;i<btn.length;i++) {
                        btn[i].className = '';
                        div[i].style.display='none';
                    }
                    this.className = 'active'; 
                    div[this.index].style.display = 'block';
                };
            }
        };

this将引用此处的窗口。除非你在对象窗口上放一个属性索引(真的不建议),否则这是行不通的。

因此,如果这个函数是在一个对象上的方法中执行的,你就必须执行经典的技巧:

 var me = this;
 window.onload=function(){
     ...
     div[me.index].style.display = 'block';
 }

div数组为空。你打算用吗

getElementsByTagName

而不是

getElementsByName

返回DIV时?

此外,您应该在尝试访问之前检查数组长度。

更新的代码http://jsfiddle.net/QCxwr/9/