Javascript 无法在addEventListener调用的函数中调用函数
基本上,我希望能够从.csv文件加载配置,并使用它来设置HTML页面。经过一番挖掘,我找到了文件阅读器和AddEventListener的通用解决方案。我的HTML看起来是这样的: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
<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);