1

我一直在使用 JavaScript 组合手风琴式左导航,我遇到了以下代码在 Chrome 和 Firefox 中有效但在 IE 中无效的问题。

function navClick(clickedDD){
    var numDD = document.getElementsByClassName('navDropdown');
    var numArrow = document.getElementsByClassName('navUnfolded');
    var selectedDD = document.getElementById('dd0' + clickedDD);
    var arrow = document.getElementById('arrow0' + clickedDD);
    if (selectedDD.style.display == 'none') {
        for (var i = numDD.length - 1; i >= 0; i--) {
            numDD[i].style.display = 'none';
        }
    }
    if (arrow.className == 'navFolded') {
        for (var i = numArrow.length - 1; i >= 0; i--) {
            numArrow[i].className = 'navFolded';
        }
    }
    if (selectedDD.style.display == 'none') {
        selectedDD.style.display = 'block';
        arrow.className = 'navUnfolded';
    } else {
        selectedDD.style.display = 'none';
        arrow.className = 'navFolded';
    }
}

我不确定是什么让它无法运行,但我怀疑这是我在 onclick 中使用的“this.id”。

<div id="1" onclick="navClick(this.id);">Content</div>

我对 JavaScript 比较陌生,如果知道有帮助的话。基本上,此函数首先查看是否显示单击的 div,如果没有,则在继续之前将所有 div 的 display 设置为 none。如果显示它,它什么也不做,因为下一位将处理它。对于带有变化的箭头图像的 div,也有类似的规则。然后,如果没有显示 div,则将其设置为“阻止”,否则将其设置为“无”,这使我可以打开和关闭单个菜单 div,而无需打开/关闭其他菜单。

我正在使用 onclick 函数收集的 id 来控制具有不同 id 的 div,从底部到函数顶部的变量中可以看到。也许这就是 IE 变得敏感的地方。

任何帮助表示赞赏。

4

3 回答 3

3

在您的元素上,尝试将 ID 放在引号中:

<div id = '1' onClick="navClick(this.id);">

您还可以尝试使用 javascript 的“警报”功能来找出 IE 中的数据是什么样的:

alert(selectedDD); 
于 2012-11-26T19:29:46.367 回答
1

getElementsByClassName IE8 或更低版本不支持

如果您不想使用完整的库,您可以尝试Jonathan Snook 的IE8 及以下兼容性方法。

于 2012-11-26T19:33:42.090 回答
0

您的 id in<div id="1" ..无效:

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。

因此,请尝试将其更改为有效的(例如#a1),因为这可能是您的问题的原因。

于 2012-11-26T19:28:37.247 回答