簡體   English   中英

Javascript for ... of在Safari中不起作用

[英]Javascript for…of doesn't work in Safari

目前我正在嘗試建立一個簡單的側導航,只要點擊其中一個“toggleSidenav”按鈕(有多個)就會出現/消失。

在使用Firefox和Chrome進行測試時似乎工作正常,但今天當我嘗試使用Safari(桌面和移動版)打開我的頁面時,按鈕沒有做任何事情。

問題似乎是我使用的循環,但檢查for ...引用 ,Safari應該支持它。

我的代碼:

for (var btn of document.getElementsByClassName("toggleSidenav")) {
    btn.addEventListener("click", function() {
        var style = window.getComputedStyle(document.getElementById("sidenav"));

        if (style.getPropertyValue("display") == "none") {
            openSidenav();
        } else {
            closeSidenav();
        }
    });
}

我可能還需要使用另一種方法,因為for ...只能由IE / Edge 12+支持,但我仍然想知道為什么這不起作用。

Safari支持for-of與陣列。 getElementsByClassName返回一個NodeList ,它類似於數組,但不是真正的數組,因此您需要將其轉換為數組。 由於您需要對for-of支持ECMAScript 6,因此可以使用Array.from()進行此轉換,而不是像Array.prototype.slice.call()這樣的舊習慣用法。

 for (var btn of Array.from(document.getElementsByClassName("toggleSidenav"))) { btn.addEventListener("click", function() { var style = window.getComputedStyle(document.getElementById("sidenav")); if (style.getPropertyValue("display") == "none") { openSidenav(); } else { closeSidenav(); } }); } function openSidenav() { document.getElementById("sidenav").style.display = 'block'; } function closeSidenav() { document.getElementById("sidenav").style.display = 'none'; } 
 <button class="toggleSidenav"> Toggle 1 </button> <button class="toggleSidenav"> Toggle 2 </button> <button class="toggleSidenav"> Toggle 3 </button> <div id="sidenav"> Side Nav </div> 

暫無
暫無

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

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