【发布时间】:2023-03-20 01:14:02
【问题描述】:
我使用 EcmaScript6,但不知道如何在类中应用 addEventListener。 我尝试从 Class 中声明一个 var 来调用 EventListener 方法并得到一个错误:/。我也在 Class 中尝试了 addEventlistener ,但我不能。
控制台中的错误,是因为我正在重试新的替代品。
不知道解决问题。如何添加事件监听器?
<!-- language: lang-js -->
class Design{
transition(clickea, up, down){
this.clickea = clickea;
this.up = up;
this.down = down;
let cont = 0;
let focus = document.getElementById(clickea);
let content = document.getElementById(up);
let content2 = document.getElementById(down);
if(cont == 0){
content.style.transform = "translateY(-1000%)";
content2.style.transform = "translateY(0%)";
cont++;
}else{
content.style.transform = "translateY(0%)";
content2.style.transform = "translateY(-100%)";
cont--;
}
}
}
const design = new Design();
let enlance = document.getElementById('sign');
enlance.addEventListener('click', desgin.transition(enlance, loguin,
registro));
谷歌控制台
eventos.js:11 Uncaught TypeError: Cannot read property 'style' of null
at Design.transition (eventos.js:11)
at eventos.js:24
或
<!-- language: lang-js -->
class Design{
transition(clickea, up, down){
this.clickea = clickea;
this.up = up;
this.down = down;
let cont = 0;
let focus = document.getElementById(clickea);
let content = document.getElementById(up);
let content2 = document.getElementById(down);
focus.addEventListener('click', function(up,down){
if(cont == 0){
content.style.transform = "translateY(-1000%)";
content2.style.transform = "translateY(0%)";
cont++;
}else{
content.style.transform = "translateY(0%)";
content2.style.transform = "translateY(-100%)";
cont--;
}
});
}
}
const diseño = new Design();
let enlance = document.getElementById('sign');
let loguin = document.getElementById('loguin');
let registro = document.getElementById('registro');
diseño.transition(enlance, loguin, registro);
eventos.js:10 Uncaught TypeError: Cannot read property 'addEventListener' of null
at Design.transition (eventos.js:10)
at eventos.js:29
transition @ eventos.js:10
我的问题是,如何在模板方法类中使用监听器。
【问题讨论】:
-
你在调用事件回调,你需要传入一个函数引用。
-
首先,如果你想设置这样的事件监听器,那么你对
design.transition(...)的调用必须返回一个函数。其次,你需要决定你的参数是什么。在第二个示例中,您正在调用document.getElementById(clickea),但clickea已经 是一个元素,即document.getElementById('sign')。 -
您所描述的与类无关。您错误地使用了
addEventListener和getElementById,如果您不使用类,您也会遇到同样的问题。在第一种情况下,您调用的是函数而不是传递它做addEventListener。在第二种情况下,您将一个不是字符串的值传递给getElementById,因此getElementById返回null。
标签: javascript class ecmascript-6