我有一个需要注册点击的汉堡菜单(我将展开菜单..)
汉堡图标/菜单的HTML是:
<div class="burger-menu-holder">
<a href="#" id="burger-menu">
☰
</a>
</div>
CSS很简单:
#burger-menu{
display: block;
}
注册点击并运行该功能的Javascript是:
var burger = document.getElementById("burger-menu");
burger.addEventListener('click', function(){
if(burger.style.display=='block'){
alert("LOL");
}
}, false);
然而,当我点击菜单时没有任何反应。控制台中没有错误,但是当我移除它if(burger.style.display == 'block')
时它会起作用,导致我认为由于某种原因它没有正确测试CSS属性。
答案 0 :(得分:5)
问题是汉堡最初没有style="display: block;"
(即使它可见),所以burger.style.display == 'block'
失败。
测试元素CSS样式的方法不是很可靠。我会去上课:
var burger = document.getElementById("burger-menu");
burger.addEventListener('click', function() {
if (burger.className === 'show') {
alert("LOL");
}
}, false);
HTML:
<a href="#" id="burger-menu" class="show">☰</a>
在CSS中:
.show {
display: block;
}
类名的另一个好处是,您可以轻松更改和设置show
行为,而不会影响JavaScript代码。
答案 1 :(得分:2)
尝试这样:
<div class="burger-menu-holder">
<a href="#" id="burger-menu" style="display: block;">
☰
</a>
</div>
答案 2 :(得分:0)
DOM属性element.style.something
将只获得内联定义的样式,例如:
<a href="#" id="burger-menu" style="display: block;">
对于测试样式,请使用css类。 (看看 dfsq 的回答)
答案 3 :(得分:0)
手动设置&#34;样式&#34;之间的区别参数和计算出的风格。
所以看一下例如webkit / opera中的getComputedStyle,IE中的currentStyle。各种工具包提供了更好的方法来访问它。
答案 4 :(得分:0)
如上所述,它不是最佳的测试方式。但是,如果您愿意,可以使用getComputedStyle
,然后使用getPropertyValue
获取display
值,如下所示:
var burger = document.getElementById("burger-menu");
burger.addEventListener('click', function(){
// Get the computed display value after the stylesheet has been applied
var display = window.getComputedStyle(burger).getPropertyValue("display");
if(display === "block"){
alert("LOL");
}
}, false);