- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在监听文件输入的更改,每次监听器“听到”某些内容后我都需要将其删除。
问题是,使用命名函数(无法删除匿名函数上的监听器)我会丢失上下文,因此无法访问状态。这是一个基本版本:
$ImgEl.on('change', () => {
const reader = new FileReader();
reader.onloadend = (e) => {
// Do some stuff with state
this.state.whatever;
}
}
使用带有箭头函数的代码,我可以维护上下文,从而可以访问我的状态。但是,如果我使用命名函数,我就能够删除监听器,但会丢失上下文。
还有其他人处理过这个问题吗?
最佳答案
这与命名函数和匿名函数无关。重要的是您是否有对该函数的引用。
如果您想删除 change
处理程序,例如:
// *** Create the function and remember a reference to it
const handler = () => {
const reader = new FileReader();
reader.onloadend = (e) => {
// Do some stuff with state
this.state.whatever;
// Remove it
$ImgEl.off('change', handler); // *** Remove the handler
}
};
$ImgEl.on('change', handler); // *** Hook up the handler
恰好does create a named function ,但即使它创建了一个匿名的,也没关系,因为您可以引用它。
您似乎正在使用 jQuery,因此我也将使用 event namespaces 来提及这一点。 ,您不需要对该函数的引用来删除它,请参阅以下内容中的 .foo
:
$ImgEl.on('change.foo', () => {
const reader = new FileReader();
reader.onloadend = (e) => {
// Do some stuff with state
this.state.whatever;
// Remove the handler
$ImgEl.off('change.foo');
}
});
我会使用带有函数引用的版本,但你有选择。 :-)
关于javascript - 当使用命名函数会阻碍对上下文状态的访问时如何处理事件删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56636010/
我有一个数据 GridView ,如下所示。在 CellEndEdit 事件中,它会更新 MySql 数据库中的表格 - 但前提是您单击另一个单元格,而不是在您按下回车键、制表符、向下箭头等时。 Da
该应用程序是在 Spring Boot 2.0.1 上开发的。我添加了下一个依赖项以便能够使用 JavaMelody - dependency("net.bull.javamelody:javamel
我应该使用 javascript 进行 json 调用: var arr = { username: "user@user.com", password : "mypassword" , portfo
我的症状与 https://forums.aws.amazon.com/message.jspa?messageID=580990#580990 相同但在 EB Docker 预配置 Python 上
我是一名优秀的程序员,十分优秀!