Javascript 如果/否则无法按预期工作
Javascript if/else not working as expected
我正在尝试切换带有链接的隐藏菜单。但是当我单击链接时,它会重新打开隐藏的菜单而不是关闭它。
以下是我期望它运行的方式:
-
当我点击
labelLink
如果hiddenBox
display = 'none'
,则将其更改为display = 'block'
如果hiddenBox
display = 'block'
,则按blur()
删除其焦点并将其设置为display='none'
-
当我在具有焦点的
hiddenBox
外部单击时,设置隐藏框的display='none'
(这部分运行良好。
小提琴
<ul>
<li>
<a id="labelLink" href="#"
onclick="
if(document.getElementById('hiddenBox').style.display === 'block'){
document.getElementById('labelLink').focus();
document.getElementById('hiddenBox').style.display ='none';
}
else{
document.getElementById('hiddenBox').style.display = 'block';
document.getElementById('hiddenBox').focus();
}
return false;"
>
Click Me
</a>
<div id="hiddenBox" tabindex="-1"
onblur="document.getElementById('hiddenBox').style.display ='none';"
>
I was hidden
</div>
</li>
</ul>
改为这样做。
var labelLink = document.getElementById('labelLink');
var hiddenBox = document.getElementById('hiddenBox');
labelLink.addEventListener('click', function() {
hiddenBox.style.display = hiddenBox.style.display == 'block' ? 'none': 'block';
});
labelLink.addEventListener('blur', function() {
hiddenBox.style.display = 'none';
})
#hiddenBox {
display: none
}
<ul>
<li><a id="labelLink" href="#">Click Me</a>
<div id="hiddenBox" tabindex="-1">I was hidden</div>
</li>
</ul>
如前所述,两个事件侦听器相互干扰。解决此问题的一种方法是在显示隐藏框时删除labelLink
侦听器,并在再次隐藏隐藏框后稍微停顿一下恢复侦听器。JSFiddle
var labelLink = document.getElementById('labelLink'),
hiddenBox = document.getElementById('hiddenBox');
labelLink.addEventListener('click', showBox);
hiddenBox.addEventListener('blur', hideBox);
function showBox(){
hiddenBox.style.display = 'block';
hiddenBox.focus();
labelLink.removeEventListener('click', showBox);
}
function hideBox() {
hiddenBox.style.display = 'none';
labelLink.focus();
window.setTimeout(function() {
labelLink.addEventListener('click', showBox);
}, 500);
}
<a id="labelLink" href="#" >Click Me</a>
<div id="hiddenBox" tabindex="-1" style="display:none" >I was hidden</div>
相关文章:
- 用户名输入如果其他块不能正常工作/Javascript-jQuery-AJAX
- PHP:运行后变量不工作“;如果“;命令
- jquery onclick if..否则如果..否则无法正常工作
- Angular ng sortable-如果我在一个栏中添加了一个搜索框,则拖放在两列之间无法正常工作
- Caret函数没有'如果插入符号在最后一个位置,就不能正常工作
- 如果定子工作不正常
- 如果谷歌工作表上的指定列发生更改,则发送电子邮件通知
- 如果else-bind不能正常工作,则淘汰
- 如果未找到或未在ng视图外工作,则为ng
- JQuery动画打断了脚本,但如果没有它,脚本就可以工作
- ng,如果工作不正常
- 如果我在其中使用alert,Javascript代码就可以工作,否则它'It’不起作用
- 如果我对索引进行硬编码,它会按预期工作,为什么这个增量器会返回NAN
- 如果快速切换,ng类在绑定变量上不能很好地工作,这可能吗
- 如果else不在javascript中工作
- 为什么Ng Repeat不工作,如果按钮从不同的形式调用
- AngularJS-如果不工作,则使用ng输入自动对焦
- 如果(isset($_POST['action']))不工作
- 如果IE条件不;t工作
- jquery是(“;: focus")在safari中不工作.如果任何解决方案($ ().parents(&