天天看點

Uncaught TypeError: Cannot set property 'display' of undefined解決

這個問題不是CSS的問題,而是一個純javascript的問題。

如果大家使用的是JQuery,有$這個符号,可以看看下面這些文字,如果沒有,直接跳過即可。

這是看一個大佬的部落格,學習到的,這裡附上連結:

https://www.cnblogs.com/Renyi-Fan/p/9013126.html

在 prototype 和DWR 的JS 類庫裡也有這個符号,

在這兩個類庫裡的這個符号是代表 document.getElementById()這個函數。

為了達到document.getElementById() 這個函數的效果,JQuery 也試用了 $() 這個符号。

也就是說:

$("#myId")就是原生JS裡面的document.getElementById(“myId”)

類似這樣子的改變,還有以下常見方式:

    $("div p"); // (1)

     $("div.container"); // (2)   

     $("div #msg"); // (3)   

     $("table a",context); // (4)
           
  • 第一行代碼得到所有标簽下的P元素。
  • 第二行代碼得到class 為container的元素。
  • 第三行代碼得到标簽下面id為msg的元素。
  • 第四行代碼得到context為上下文的table裡面所有的連接配接元素。

    jquery就是通過這樣的方式來找到Dom對象裡面的元素。跟CSS的選擇器相類似

下來看看這個問題:

Uncaught TypeError: Cannot set property ‘display’ of undefined

Uncaught TypeError: Cannot set property 'display' of undefined解決

首先,css寫得沒錯,問題出在Javascript當中的 getElementsByClassName(“xxx”),

這個方法得到的是一個由class="xxx"的所有元素組成的集合,而不是單個元素;

集合是沒有display屬性的,集合中的元素才有display屬性。當你試圖做 集合.style.display的時候,自然會報錯。

是以你這個問題的解決方案應該是:周遊集合中所有的元素,然後給每個元素都加上display="none"的屬性。示例代碼如下:

var divset=document.getElementsByClassName("el-upload-list");
        	for (var i = 0; i<divset.length;i++) {
        		   divset[i].style.display="block";
        		 };
           

修改之後成功。

END

good lunck to you