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

    技术2022-07-15  71

    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、当你运行完成并且点击的时候相应的按键时,会出现如下问题,如图:

     

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

    产生原因:由于浏览器在解析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】即可!

    解决结果如下图:

    Processed: 0.015, SQL: 9