Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这不是在单击事件侦听器中使用的函数_Javascript - Fatal编程技术网

Javascript 这不是在单击事件侦听器中使用的函数

Javascript 这不是在单击事件侦听器中使用的函数,javascript,Javascript,我正在处理一个javascript文件,代码如下 class test(){ constructor(){ } showBox(){ var countBlock = document.createElement("div"); document.body.appendChild(countBlock); countBlock.addEventListener('click', function(){

我正在处理一个javascript文件,代码如下

class test(){
    constructor(){
    }
    showBox(){
        var countBlock = document.createElement("div");
        document.body.appendChild(countBlock); 
        countBlock.addEventListener('click', function(){
            this.showList()
        });
    }
    showList(){
        console.log('Element clicked')
    }
}
除非我单击元素,否则代码工作正常,当我单击它时,它会显示这个。showList不是一个函数

不确定如何解决此问题

请使用:

Arrow函数以词汇形式绑定其上下文,因此它引用原始上下文,即包含Arrow函数的代码的上下文

或者使用常规函数,但将包含此函数的函数绑定到您的函数:

countBlock.addEventListener('click', function () { this.showList() }.bind(this));
// or shorter, no need to wrap it in a function:
countBlock.addEventListener('click', this.showList.bind(this));
你可以阅读更多关于这方面的内容

以下是基于您的代码的示例:

课堂测试{ 陈列柜{ const countBlock=document.createElement'p'; document.body.appendChildcountBlock; countBlock.addEventListener'click',=>this.showList; } 展示清单{ console.log'Element clicked' } } 新的测试展示箱; p{ 宽度:20px; 高度:20px; 背景:黑色; 光标:指针; } 使用一个:

Arrow函数以词汇形式绑定其上下文,因此它引用原始上下文,即包含Arrow函数的代码的上下文

或者使用常规函数,但将包含此函数的函数绑定到您的函数:

countBlock.addEventListener('click', function () { this.showList() }.bind(this));
// or shorter, no need to wrap it in a function:
countBlock.addEventListener('click', this.showList.bind(this));
你可以阅读更多关于这方面的内容

以下是基于您的代码的示例:

课堂测试{ 陈列柜{ const countBlock=document.createElement'p'; document.body.appendChildcountBlock; countBlock.addEventListener'click',=>this.showList; } 展示清单{ console.log'Element clicked' } } 新的测试展示箱; p{ 宽度:20px; 高度:20px; 背景:黑色; 光标:指针; } this.showList不在测试类的作用域内,因为您将其包装在匿名函数中。 这样做:

class test{
    constructor(){
    }
    showBox(){
        var countBlock = document.createElement("div");
        document.body.appendChild(countBlock); 
        countBlock.addEventListener('click', this.showList);
    }
    showList(){
        console.log('Element clicked')
    }
}
this.showList不在测试类的作用域内,因为您将其包装在匿名函数中。 这样做:

class test{
    constructor(){
    }
    showBox(){
        var countBlock = document.createElement("div");
        document.body.appendChild(countBlock); 
        countBlock.addEventListener('click', this.showList);
    }
    showList(){
        console.log('Element clicked')
    }
}
类测试{似乎是错误的,其次使用arrow函数绑定这个

课堂测试{ 构造函数{} 陈列柜{ console.log'Show Box Executed' var countBlock=document.createElementdiv; 设txt=document.createTextNode'Div'; countBlock.appendChildtxt; document.body.appendChildcountBlock; countBlock.addEventListener'click',=>{ 这是一个展示列表 }; } 展示清单{ console.log'Element clicked' } } 设t=新试验; _t、 showBox;类测试{似乎是错误的,其次使用arrow函数绑定这个

课堂测试{ 构造函数{} 陈列柜{ console.log'Show Box Executed' var countBlock=document.createElementdiv; 设txt=document.createTextNode'Div'; countBlock.appendChildtxt; document.body.appendChildcountBlock; countBlock.addEventListener'click',=>{ 这是一个展示列表 }; } 展示清单{ console.log'Element clicked' } } 设t=新试验;
_t、 showBox;在事件侦听器的上下文中,这是您单击的元素。您在JS中不理解这一点。它不像java。在事件侦听器的上下文中,这是您单击的元素。您在JS中不理解这一点。它不像java。谢谢,这是一个快速而完美的解决方案。您能推荐一些给我吗关于javascript的文章或教程,我在jQuery中工作,只掌握Java方面的基本知识javaScript@VikramSingh,不客气,JavaScript的一个很好的参考是,我发现它非常有用,否则,MDN的文档也很好。谢谢,这是一个快速而完美的解决方案。你能为我推荐一些文章或教程吗javascript,我在jQuery中工作,只掌握Java方面的基本知识javaScript@VikramSingh,不客气,JavaScript的一个很好的参考是,我发现它非常有用,否则,MDN的文档也很好。