单击我的按钮时出现问题。单击事件仅适用于双击

问题描述 投票:0回答:1

我在点击事件方面遇到一些问题。我是 JavaScript 新手。当我单击一次时,没有任何反应,但是双击我的事件正在运行。

我尝试从 stackoverflow 中找出类似的请求,但我还不明白,为什么点击事件会发生这种情况。

addEventListener('DOMContentLoaded', function() {
  const sadness = document.getElementById('btn-sadness');
  const happynes = document.getElementById('btn-happy');

  sadness.disabled = true;

  happynes.addEventListener('click', function() {
    const x = document.querySelector('.image');

    if (x.style.display === 'none') {
      x.style.display = 'block';
    } else {
      x.style.display = 'none';
    }
  });
});
.container {
  width: 400px;
  margin: 0 auto;
  text-align: center;
}

.image-container {
  display: inline-block;
}

img {
  display: none;
  width: 170px;
  margin-bottom: 10px;
}

button {
  display: block;
  margin: 0 auto;
}
<div class="container">
  <div class="image-container">
    <img class="image" src="test-img.JPG" alt="img">
    <button id="btn-happy">Happy</button>
    <button id="btn-sadness">Sadness</button>
  </div>
</div>

javascript button onclick
1个回答
0
投票

你的代码没问题,这是浏览器的行为。浏览器会检查是否存在隐藏图像的样式(例如

display: none
visibility: hidden
),并根据这些样式将(或不会)加载图像。在您的情况下,图像在页面加载时为
display: none
,这就是图像未加载的原因,并且
if(x.style.display === 'none')
返回
false
并将执行
else
块。该块与下载图像的图像进行交互,但它仍然不可见,因为 else 块设置了
display: none
。这就是为什么您需要双击才能使图像可见。要解决此问题,您只需检查图像是否可见,而不是检查图像是否不可见。

addEventListener('DOMContentLoaded', function(){
    const sadness = document.getElementById('btn-sadness');
    const happynes = document.getElementById('btn-happy');

    sadness.disabled = true;

    happynes.addEventListener('click', function(){ 
        const x = document.querySelector('.image');

        if(x.style.display === 'block'){
            x.style.display = 'none';
        } else {
            x.style.display = 'block';
        }
    });
});
.container{
    width: 400px;
    margin: 0 auto;
    text-align: center;
}

.image-container{
    display: inline-block;
}

img{
    display: none;
    width: 170px;
    margin-bottom: 10px;
}

button {
    display: block;
    margin: 0 auto;
}
<div class="container">
    <div class="image-container">
        <img class="image" src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="img">
        <button id="btn-happy">Happy</button>
        <button id="btn-sadness">Sadness</button>
    </div>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.