【发布时间】:2018-07-28 16:58:05
【问题描述】:
我想通过js中的事件监听器执行“onClick”中的逻辑,但它似乎只运行一次?我有四门课,但我不明白为什么它似乎只适用于第一门?
HTML:
<button id='btn-1' type="button" name="first" class="breakdown main-text" onclick="enableButton('btn-2');disableButton('btn-1');show('btn-1')"> Breakdown Start </button>
<button id='btn-2' type="button" name="second" class="breakdown main-text" onclick="enableButton('btn-3');disableButton('btn-2');show('btn-2')" disabled> Repair Start </button>
<button id='btn-3' type="button" name="third" class="breakdown main-text" onclick="enableButton('btn-4');disableButton('btn-3');show('btn-3')" disabled> Repair End </button>
<button id='btn-4' type="button" name="fourth" class="breakdown main-text" onclick="show('btn-4')" disabled> Breakdown Ended </button>
JS:
let button1 = document.querySelector('#btn-1')
let button2 = document.querySelector('#btn-2');
let button3 = document.querySelector('#btn-3');
let button4 = document.querySelector('#btn-4');
const breakdownButton = document.querySelector('.breakdown');
breakdownButton.addEventListener('click', function() {
console.log(this.innerHTML);
});
【问题讨论】:
-
其他按钮被禁用。除了第一个按钮之外,不会触发它们的事件监听器
-
我还能如何动态禁用和重新启用按钮?
-
使用event delegation而不是分配多个事件监听器 — 它更易于维护。例如,使用event argument 的
target。请参阅 the tag info 和 What is DOM Event delegation?。这里:addEventListener("click", ({ target }) => { if(target.closest(".breakdown")){ console.log(target.innerHTML); } });. -
相关(可能重复):addEventListener on NodeList.
标签: javascript html addeventlistener dom-events event-listener