javascript解决【Uncaught TypeError: Cannot read property ‘style‘ of undefined at HTMLHeadingElement.】问题

1、首先我随机选取的一种存在此问题的代码,其代码如下:

var aList = document.querySelectorAll(".F-nav-li h2");
    var aHide = document.querySelectorAll(".F-hide-1");
    for(var i = 0; i < aList.length; i++){   //  从哪来  到哪结束 怎么去
        aList[i].onclick = function(){  // 鼠标点击事件
            console.log("你是个牛",i); 
            aHide[i].style.height = "125px";//此时会产生报错,报错原因是由于i的取值越界了!
        }

    }

 

2、当你运行完成并且点击的时候相应的按键时,会出现如下问题,如图:

javascript解决【Uncaught TypeError: Cannot read property ‘style‘ of undefined at HTMLHeadingElement.】问题_第1张图片

 

3、这i的取值超过了aList.length!这是为什么?通常将这类问题称为【取值越界问题】!

javascript解决【Uncaught TypeError: Cannot read property ‘style‘ of undefined at HTMLHeadingElement.】问题_第2张图片

产生原因:由于浏览器在解析js文件时,是从上至下进行解析。但是在js中有一种情况例外,就是鼠标点击事件。因为在网页运行出来后,点击事件不会被执行。

如上图中当浏览器解释到for循环中的onclick时,就终止了,然后把相应的信息存放在方框内,然后一直循环,知道【i=aList.length】不满足循环条件时,跳出循环;然后,向下继续执行,因此造成了此类问题!

4、此类问题的解决方法有很多种,下面仅仅列出一种方法,希望对大家有帮助!

 var aList = document.querySelectorAll(".F-nav-li h2");
    var aHide = document.querySelectorAll(".F-hide-1");

    for(var i = 0; i < aList.length; i++){   //  从哪来  到哪结束 怎么去
         /*
            第一次循环: aList[0].index = 0; 
            第二次循环: aList[1].index = 1; 
            第三次循环: aList[2].index = 2; 
            用于保存相应的下标【index】
        */
        aList[i].index = i;  // 自定义属性用于保存相应的下标
       
        aList[i].onclick = function(){  // 鼠标点击事件

            console.log("你是个牛",this.index);  //this指针,指哪打哪 !this.index将获取一对一的下标

            aHide[this.index].style.height = "125px";//此时会产生报错,报错原因是由于i的取值越界了!
        }

    }
 

 

解决方案:自定义属性,用来保存相关的下标信息,然后使用this指针指定到相关的下标【index】即可!

解决结果如下图:

javascript解决【Uncaught TypeError: Cannot read property ‘style‘ of undefined at HTMLHeadingElement.】问题_第3张图片

你可能感兴趣的:(JavaScript,javascript)