Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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 无法在addEventListener调用的函数中调用函数_Javascript_Html_Callback_Filereader_Addeventlistener - Fatal编程技术网

Javascript 无法在addEventListener调用的函数中调用函数

Javascript 无法在addEventListener调用的函数中调用函数,javascript,html,callback,filereader,addeventlistener,Javascript,Html,Callback,Filereader,Addeventlistener,基本上,我希望能够从.csv文件加载配置,并使用它来设置HTML页面。经过一番挖掘,我找到了文件阅读器和AddEventListener的通用解决方案。我的HTML看起来是这样的: <html> <head> <script src="kernel.js"></script> <script> var k = new kernel(); </scrip

基本上,我希望能够从.csv文件加载配置,并使用它来设置HTML页面。经过一番挖掘,我找到了文件阅读器和AddEventListener的通用解决方案。我的HTML看起来是这样的:

<html>
    <head>
        <script src="kernel.js"></script>
        <script>
            var k = new kernel();
        </script>
    </head>

    <body>

        <input type="file" id="file-input" />
        <script>
            document.getElementById('file-input').addEventListener('change', k.loadConfig, false);
        </script>

        <!-- Tables and stuff that i want to modify -->

    </body>
</html>
如果我没弄错的话,console.log()应该显示文件的内容。但是结果却是空的,我被卡住了

如果有人能帮助我,甚至指引我正确的方向,我会非常感激

问候,,
Dom。

您正在失去执行上下文。您可以通过将
kernel.loadConfig
函数显式绑定到
kernel
对象来修复它:

将匿名函数用作事件处理程序也可以:

document.getElementById('file-input')
  .addEventListener('change', function() {
    kernel.loadConfig();
  }, false);

您需要绑定正确的上下文。在内核函数中,添加
var self=this然后使用`var reader=self.readSingleFile(e);我的浏览器不喜欢没有()的
函数内核{
:下次请点击
按钮并创建
var kernel=new kernel();
将内核变量重命名为k,不会更改任何内容。添加了var self=如图所示(编辑后)但现在reader.result为null,所以我猜还是有问题。我必须在readSingleFile()中返回reader吗?
document.getElementById('file-input')
  .addEventListener('change', kernel.loadConfig.bind(kernel), false);
document.getElementById('file-input')
  .addEventListener('change', function() {
    kernel.loadConfig();
  }, false);