當元素的樣式不同于“display = none”時,我目前正在嘗試關閉它。我在控制臺中遇到錯誤,告訴我 lists.some 不是一個函式,所以我可能不太了解“some”方法。
關于我想要的更多資訊:鑒于我有 3 個串列(在串列中),當我點擊它或其元素之外時,我想關閉所有串列)
提前致謝
const lists = document.querySelectorAll(".list");
function closeList() {
document.addEventListener("click", () => {
if(lists.some((list) => list.style.display != "none")) {
return lists.style.display = none;
} else return;
});
};
uj5u.com熱心網友回復:
您可以使用Node.contains()檢查Event.target是否是元素的后代,如果不是則運行回呼:
function onClickOutside(ele, cb) {
document.addEventListener('click', event => {
if (!ele.contains(event.target)) cb();
});
};
// Using
onClickOutside('#list', () => console.log('Hi!'));
// Will log 'Hi!' whenever the user clicks outside of #list
uj5u.com熱心網友回復:
我建議你這個方法:
@HostListener('document:click', ['$event.target'])
public onClick(targetElement) {
const event = this.elementRef.nativeElement.contains(targetElement);
if (targetElement && !event) {
if (this.isClickedOutside) {
// this.shownInfo = false;
}
}
或者你也可以只是一個 javascript :
window.addEventListener('click', function(e){
if (document.getElementById('clickbox').contains(e.target)){
// Clicked in box
} else{
// Clicked outside the box
}
});
uj5u.com熱心網友回復:
js querySelectorAll()會回傳一個nodeList,但是nodeList沒有some()方法。您可以使用 forEach() 以下內容:
const lists = document.querySelectorAll(".list");
function closeList() {
document.addEventListener("click", () => {
lists.forEach(list => {
if(list.style.display != "none") lists.style.display = none
})
});
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493230.html
標籤:javascript
