我一直在编辑一个脚本,我点击它时将菜单图标变成蓝色。 原始脚本有8个if语句。这很好用,但当我将if语句更改为开关时,它停止工作。我已经三次检查它的语法错误,拼写错误等,但菜单图标仍然是灰色的!
任何人都可以给我一个解释吗?
window.onload = function() {
[].forEach.call(document.querySelectorAll('.navico'), function(el) {
el.addEventListener('click', imageButtonClickHandler);
});
function imageButtonClickHandler()
{
switch(this.id)
{
case(this.id.match("aboutnav")):
grey();
$('#abouttitle').css('color', 'blue');
$('#a').css('color', 'blue');
break;
case(this.id.match("routenav")):
grey();
$('#routetitle').css('color', 'blue');
$('#b').css('color', 'blue');
break;
case(this.id.match("enternav")):
grey();
$('#entertitle').css('color', 'blue');
$('#c').css('color', 'blue');
break;
case(this.id.match("racedaynav")):
grey();
$('#racedaytitle').css('color', 'blue');
$('#d').css('color', 'blue');
break;
case(this.id.match("gallerynav")):
grey();
$('#e').css('color', 'blue');
$('#gallerytitle').css('color', 'blue');
break;
case(this.id.match("newsnav")):
grey();
$('#f').css('color', 'blue');
$('#newstitle').css('color', 'blue');
break;
case(this.id.match("resultsnav")):
grey();
$('#g').css('color' , 'blue');
$('#resultstitle').css('color', 'blue');
break;
case(this.id.match("contactnav")):
grey();
$('#contacttitle').css('color', 'blue');
$('#h').css('color', 'blue');
break;
}
}
}
};
谢谢!
答案 0 :(得分:5)
将 this.id.match("某些")更改为案例"某些内容" 如果您正在寻找确切的内容ID值。如果您尝试应用正则表达式来匹配字符串的某些部分,我认为您不能使用switch。
开关在你的情况下做了什么:对于每个 case ,它调用match方法并决定函数的结果(array或null)是否等于你的字符串。这当然不会发生。
答案 1 :(得分:0)
以下是您的问题的工作示例。 JsFiddle link
HTML:
<div id="aboutnav" class="navico">Click 1</div>
<div id="routenav" class="navico">Click 2</div>
<div id="enternav" class="navico">Click 3</div>
<div id="racedaynav" class="navico">Click 4</div>
使用Javascript:
$(document).ready(function () {
[].forEach.call(document.querySelectorAll('div.navico'), function (el) {
el.addEventListener('click', imageButtonClickHandler);
});
function imageButtonClickHandler() {
switch (this.id) {
case "aboutnav":
$('#aboutnav').css('color', 'blue');
$('#a').css('color', 'blue');
break;
case "routenav":
//grey();
$('#routenav').css('color', 'red');
$('#b').css('color', 'blue');
break;
case "enternav":
//grey();
$('#enternav').css('color', 'yellow');
$('#c').css('color', 'blue');
break;
case "racedaynav":
//grey();
$('#racedaynav').css('color', 'orange');
$('#d').css('color', 'blue');
break;
}
}
});