diff --git a/app/webpacker/controllers/checked_controller.js b/app/webpacker/controllers/checked_controller.js index fc7ac72b18..e29a4391e6 100644 --- a/app/webpacker/controllers/checked_controller.js +++ b/app/webpacker/controllers/checked_controller.js @@ -7,11 +7,7 @@ export default class extends Controller { connect() { this.toggleCheckbox(); - this.allTarget.addEventListener("change", this.toggleAll.bind(this)); - - this.checkboxTargets.forEach((checkbox) => { - checkbox.addEventListener("change", this.toggleCheckbox.bind(this)); - }); + this.element.addEventListener("change", this.#toggleChangeListener.bind(this), {passive: true}); } toggleAll() { @@ -39,6 +35,15 @@ export default class extends Controller { // private + // Delegate events for targets (this ensures we catch events from newly-added elements after an ajax action) + #toggleChangeListener(event) { + if (event.target == this.allTarget) { + this.toggleAll(); + } else if (this.checkboxTargets.includes(event.target)) { + this.toggleCheckbox(); + } + } + #checkedCount() { return this.checkboxTargets.filter((checkbox) => checkbox.checked).length; }