点击时隐藏/显示 div
2022-08-26
79
我有一个脚本,单击按钮时会隐藏图像并显示文本。但是,我在不同的 div 中也有类似的按钮执行相同的操作。单击按钮时,无论按下哪个按钮,第一个按钮都会受到影响。
我该如何解决这个问题?
下面是我的 JS。我该如何让按钮只影响自身,而不仅仅是第一个按钮?
function hideText() {
const btn = document.querySelector('#info');
const infoHide = document.querySelector('.info-hide');
infoHide.style.display = "block"
btn.style.display = 'none'
setTimeout(()=>{btn.style.display = 'block'; infoHide.style.display= "none"}, 2000)
}
<div>
<button id="info" onClick="hideText()"> A button </button>
<div class="info-hide" style="display:none;">Copied!</div>
</div>
<div>
<button id="info" onClick="hideText()"> A button </button>
<div class="info-hide" style="display:none;">Copied!</div>
</div>
3个回答
我更改了您的事件侦听器,以了解触发事件的元素。实际上,这严格来说不是一个事件侦听器,而只是一个在事件发生时调用的函数。
有更好的方法可以使用
.addEventListener
function hideText(target) {
const infoHide = target.parentElement.querySelector('.info-hide');
infoHide.style.display = "block"
target.style.display = 'none'
setTimeout(() => {
target.style.display = 'block';
infoHide.style.display = "none";
}, 2000)
}
button{
cursor: pointer;
margin-bottom: 1rem;
}
<div>
<button id="info1" onClick="hideText(this);">A button</button>
<div class="info-hide" style="display:none;">Copied!</div>
</div>
<div>
<button id="info2" onClick="hideText(this);">A button</button>
<div class="info-hide" style="display:none;">Copied!</div>
</div>
无论如何,正如另一位用户在评论中指出的那样,id 属性应该是唯一的,所以我编辑了答案以满足该条件。
在这里,我使用一种不涉及在 html 中声明定义的事件侦听器的策略添加了方法:
document.addEventListener('DOMContentLoaded',()=>{
document.querySelectorAll('.smartbutton').forEach((btn)=>{
btn.addEventListener('click', (event)=>{ hideText(event.target); });
});
});
function hideText(target) {
const infoHide = target.parentElement.querySelector('.info-hide');
infoHide.style.display = "block"
target.style.display = 'none'
setTimeout(() => {
target.style.display = 'block';
infoHide.style.display = "none";
}, 2000)
}
.smartbutton{
cursor: pointer;
margin-bottom: 1rem;
}
.info-hide{
display: none;
}
<div>
<button id="info1" class="smartbutton">A button</button>
<div class="info-hide">Copied!</div>
</div>
<div>
<button id="info2" class="smartbutton">A button</button>
<div class="info-hide">Copied!</div>
</div>
Diego D
2022-08-26
querySelector 提取与您的字符串匹配的第一个元素。这就是为什么总是第一个按钮和第一个信息受到影响的原因。您可以使用
this
关键字提供按钮本身,并提供一个确定要显示的 div 的 id。
function hideText(button, infoClassname) {
const info = document.querySelector(`.${infoClassname}`);
console.log(button)
info.style.display = "block"
button.style.display = 'none'
setTimeout(() => {
button.style.display = 'block';
info.style.display = "none"
}, 2000)
}
<div>
<button id="info" onClick="hideText(this, 'info-hide-1')"> A button </button>
<div class="info-hide-1" style="display:none;">Copied!</div>
</div>
<div>
<button id="info" onClick="hideText(this, 'info-hide-2')"> A button </button>
<div class="info-hide-2" style="display:none;">Copied!</div>
</div>
Alper
2022-08-26
将 div 中的 id 从所有“info”更改为“info1”/“info2”/“info3”/,并在 js const btn = document.querySelector('#info1') 中做相同的更改;
caomengliang98
2022-08-26