图像不会触发脚本

时间:2017-09-22 12:43:58

标签: javascript html

我有简单的下拉按钮,里面有图片:

通过单击下拉按钮,调用dropItems(),显示列表项:



    function dropItems() {
            document.getElementById("myDropdown").classList.toggle("show");
        }
        window.onclick = function(event) {
        if (!event.target.matches('.dropbtn') || !event.target.matches('#dropdownicon')) {

            var dropdowns = document.getElementsByClassName("dropdown-content");
            var i;
            for (i = 0; i < dropdowns.length; i++) {
                var openDropdown = dropdowns[i];
                if (openDropdown.classList.contains('show')) {
                    openDropdown.classList.remove('show');
                    }
                }
            }
        }
&#13;
    <div class="dropdown">
                <button onclick="dropItems()" class="dropbtn"><img id="dropdownicon" src="img/dropdown.png" height="25" onclick="dropItems()"></button>
                <div id="myDropdown" class="dropdown-content">
                    <a href="#">Item 1</a>
                    <a href="#">Item 2</a>
                    <a href="#">Item 3</a>
                </div>
            </div>
&#13;
&#13;
&#13;

正如您所看到的,我还在按钮内的图像上应用了onclick事件,因为当您直接单击图像时它会阻止按钮的触发。

问题在于,当我点击图片时,没有任何反应。

2 个答案:

答案 0 :(得分:3)

首先,按钮中有onclick以及嵌套的图像元素,它们都调用相同的函数,因为该函数中有toggle,第二次调用可能会结束反转第一个电话的切换。

其次,不要首先使用内联HTML事件属性( here's a long list of reasons 为什么)。

但是,真正的问题是按钮内部嵌套图像的分层,这可能会阻碍按钮成为事件目标。 解决方案是根本不使用button,只是将图片设置为button,并将其编码为按钮。

最后,如果您只是在下拉列表中设置一个最初隐藏列表的类,则代码变得更加简单:

// Get references to the HTML elements we will need:
var dd = document.getElementById("myDropdown");
var img = document.querySelector("img");

// Set up the click event handler for the image:
img.addEventListener("click", dropItems);

// Set up the click event handler for the window
window.addEventListener("click", function(evt){
  // If anything except the image was clicked...,
  if(evt.target !== img){
    // Hide the list
    dd.classList.add("hide");
  }
});

function dropItems() {
  dd.classList.toggle("hide");
}
/* This will be applied to the list by default */
.hide { display:none; }

/* Style the image to make it look like a button: */
img { 
  display:inline-block;
  padding:5px;
  background-color:#e0e0e0;;
  border:1px solid #808080;
  box-shadow:1px 1px 1px #a0a0a0;
  height:25px;
}

/* Change the style when the image is clicked to make it 
   look like it's a button being clicked. */
img:active {
    box-shadow:-1px -1px 1px #606060;
}
<div class="dropdown">
  <!-- Don't use HTML to style elements. That's CSS's job. -->
  <img id="dropdownicon" class="dropbtn"
       src="https://i.pinimg.com/736x/1d/3b/8e/1d3b8e3c20793a25a32de080956cb41a--emoji-faces-smiley-faces.jpg">

  <!-- Note that the list has the "hide" class applied by default -->
  <div id="myDropdown" class="dropdown-content hide">
    <a href="#">Item 1</a>
    <a href="#">Item 2</a>
    <a href="#">Item 3</a>
  </div>
</div>

答案 1 :(得分:-1)

这不起作用,因为按钮中不允许使用图像。以下是您的问题的可能解决方案:https://stackoverflow.com/a/8683553/1751277