为什么我的JavaScript事件侦听器条件不起作用?
此事件侦听器在我单击文档中的任何位置时执行,我希望在我单击为什么我的JavaScript事件侦听器条件不起作用?,javascript,class,addeventlistener,Javascript,Class,Addeventlistener,此事件侦听器在我单击文档中的任何位置时执行,我希望在我单击This.dropdown或单击This.inputField时不执行此事件侦听器。现在,即使单击这两个元素,它也会执行 constructor(inputField, monthInput, previousMonth, nextMonth, dates, dropdown, document) { this.monthInput = monthInput; this.previousMonth = pr
This.dropdown
或单击This.inputField
时不执行此事件侦听器。现在,即使单击这两个元素,它也会执行
constructor(inputField, monthInput, previousMonth, nextMonth, dates, dropdown, document) {
this.monthInput = monthInput;
this.previousMonth = previousMonth;
this.nextMonth = nextMonth;
this.dates = dates;
this.dropdown = dropdown;
this.inputField = inputField;
this.document = document;
this.document.addEventListener('click', (e) => {
if (e.target.id !== this.dropdown.id && e.target.id !== this.inputField.id) {
this.dropdown.style.display = 'none';
}
});
}
谢谢你的建议 捕获这些元素上的单击事件并停止事件传播:
this.dropdown.addEventListener('click', (e) => {
console.log('Element clicked');
e.stopPropagation();
});
这解决了问题:
checkPathForId(path) {
for (let item of path) {
if (item === this.dropdown || item === this.inputField) {
return true;
}
}
return false;
}
我锁定了错误的元素,我试图获取的元素是父元素。我正在检查您的代码,但现在:
console.log()
是您的朋友。编辑:代码工作正常:(在第一个输入字段中单击或在“dropdown”->什么都不发生,单击其他任何地方,“dropdown”消失)单击事件通过树向上传播;我想你们还需要抓住下拉列表的孩子们。这不是OP要问的,他们想知道为什么他们的代码不能按预期运行。