gpt4 book ai didi

javascript - 图片不触发脚本

转载 作者:行者123 更新时间:2023-12-01 03:02:38 25 4
gpt4 key购买 nike

我有一个简单的下拉按钮,里面有图像:

通过单击下拉按钮,将调用 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');
}
}
}
}
    <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>

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

问题是当我点击图像时,没有任何反应。

最佳答案

首先,按钮和嵌套图像元素中有一个 onclick ,它们都调用相同的函数,并且由于该函数中有一个 toggle ,第二个调用最终可能会反转第一个调用的切换。

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

但是,真正的问题是按钮内部嵌套图像的分层,这可能会阻碍按钮成为事件目标。 解决方案是根本不使用按钮,只需将图像样式设置为看起来像按钮,然后对其进行编码以使其充当按钮。

最后,如果您只是在下拉列表上设置一个最初隐藏列表的类,代码就会变得简单得多:

// 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>

关于javascript - 图片不触发脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46365122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com