簡體   English   中英

IE錯誤:無法設置屬性“樣式”的值:對象為null或未定義

[英]IE Error : Unable to set value of the property 'style': object is null or undefined

我無法為此使用JQuery,但找不到用於修復IE8代碼的方法。 它在所有其他瀏覽器中均能很好地工作(並且適用於IE9 +)。

這是橫幅旋轉器,它停止在該行工作以隱藏可見的橫幅。

var bannerRotation = setInterval(function () {
    var img = document.querySelectorAll('#contentBannerRotator img');
    var banner = document.querySelectorAll('#contentBannerRotator a[style="display: block;"]');
    if (!banner || banner.length < 1) 
        var banner = document.querySelectorAll('#contentBannerRotator a[style="display:block;"]');

    banner[0].style.display = "none"; /* This is where the error occurs */

    var rand = Math.floor(Math.random() * img.length);
    img[rand].parentNode.style.display = "block";
}, 30000);

似乎IE8找不到與查詢選擇器匹配的內容。

您可以在此處實時看到錯誤

編輯:該文檔不會在Quirks模式下進行,因此querySelectorAll方法應該可以正常工作。

您可以嘗試檢測元素是否存在:

if(typeof banner[0] != 'undefined') {
    banner[0].style.display = "none"; /* This is where the error occurs */
}

更新:

也看過請讀這個

if身體基本什么也不做,是一個錯字?

var banner = document.querySelectorAll('#contentBannerRotator a[style="display: block;"]');
    if (!banner || banner.length < 1) 
        var banner = document.querySelectorAll('#contentBannerRotator a[style="display:block;"]');
        //  the exact same selector again?      ^

您正在使用相同的選擇器,而您似乎想回退到保證存在的另一個元素。 因此,修復選擇器,然后修復該錯誤。

錯誤說明

IE8不完全支持querySelectorquerySelectorAll ,因此它對我的查詢的響應不規則。


我為IE8創建了一個獨立循環。 僅在banner[0]元素/對象中未找到任何內容或未定義循環時,才執行循環。
IE8具有用於子節點的特定數組結構,以及all數組。

的JavaScript

var bannerRotation = setInterval(function () {
    var img = document.querySelectorAll('#contentBannerRotator img');
    var bannerContainer = document.querySelector('#contentBannerRotator');
    var banner = document.querySelectorAll('#contentBannerRotator a[style="display: block;"]');


    if (!banner[0] || banner.length < 1) {
        /* Fix for IE8 */
        for (var i = 0; i < bannerContainer.childNodes[0].all.length; i++) {
            if (bannerContainer.childNodes[0].all[i].nodeName == "A") {

                if (bannerContainer.childNodes[0].all[i].style.display == "block") {
                    bannerContainer.childNodes[0].all[i].style.display = "none";
                    break;
                }
            }
        }
    } else {
        banner[0].style.display = "none";
    }

    var rand = Math.floor(Math.random() * img.length);
    img[rand].parentNode.style.display = "block";
}, 30000);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM