【发布时间】:2021-11-04 16:04:40
【问题描述】:
我在 JavaScript ES6 中编写了一些组件,它们有多个事件,但是当我在窗口的加载事件上插入另一个类时,class1 窗口事件不会加载 Class2。我也尝试过使用 DOMContentLoaded,但我仍然得到相同的结果。我该怎么做才能使事件嵌套在 window 或 DOMContentLoaded 事件的 load 事件事件中?对于这种情况有什么解决方法,可以完成吗?下面是我的代码示例,我试图让 Class2 控制台注销,但它不会!
class Accordian {
constructor(selector) {
this.selector = selector;
this.build();
}
build() {
const self = this;
window.addEventListener('DOMContentLoaded', (event) => {
this.el = document.querySelector(this.selector);
this.dispatch('accordian__load', event, { el: this.el });
}, true);
}
on(name, callback) {
var func = this['on' + name];
if (!func) this['on' + name] = [callback];
else func.push(callback);
return this;
}
dispatch(name, event, ...props) {
var callbacks = this['on' + name];
if (callbacks)
callbacks.forEach((callback) => callback.call(this, event, ...props));
}
}
class Checkbox {
constructor(selector) {
this.selector = selector;
this.build();
}
build() {
const self = this;
window.addEventListener('DOMContentLoaded', (event) => {
this.el = document.querySelector(this.selector);
this.dispatch('checkbox__load', event, { el: this.el });
}, true);
}
on(name, callback) {
var func = this['on' + name];
if (!func) this['on' + name] = [callback];
else func.push(callback);
return this;
}
dispatch(name, event, ...props) {
var callbacks = this['on' + name];
if (callbacks)
callbacks.forEach((callback) => callback.call(this, event, ...props));
}
}
var accordian = new Accordian('#accordian')
var checkbox = new Checkbox('#chk_enable');
accordian.on('accordian__load', function(event, props) {
console.log('accordian load');
console.log(props);
checkbox.on('checkbox__load', function(event, props) {
console.log('checkbox load');
console.log(props);
});
});
<div id="accordian">
<input type="checkbox" id="chk_enable">
</div>
【问题讨论】:
-
要添加多个事件,请考虑使用
window.addEventListener("load", event => { /* function body */}) -
@Iván 请给我一个例子,因为我试过了,但它不起作用
-
理论上它应该和
.onload一样工作。这是带有一些实时示例的文档:developer.mozilla.org/en-US/docs/Web/API/Window/load_event -
@Iván 给我一个例子来回答我的问题,这就是我发布这个的原因。
标签: javascript php html ecmascript-6