我在jQuery上使用bind
上的绑定来点击并调整具有唯一命名空间的侦听器 - 所以我可以安全地解除绑定。
按下点击时 - 它正在记录“鼠标点击”消息。
但是当改变窗户尺寸时 - 没什么好笑的。
class MyView {
constructor() {
$(window.document).on('click.myView', this._onDocumentClick.bind(this));
$(window.document).on('resize.myView', this._onDocumentResize.bind(this));
$('#clean').on('click', this._cleanup.bind(this));
}
_cleanup() {
$(window.document).unbind('resize.myView');
$(window.document).unbind('click.myView');
}
_onDocumentResize() {
console.log('Window Resized'); //Not reaching here
}
_onDocumentClick() {
console.log('Mouse Clicked'); //OK
}
}
任何想法resize
和click
事件之间有什么区别?
答案 0 :(得分:1)
那是因为resize
对象而不是window
对象触发了window.document
事件,因此,这应该有效:
$(window).bind('resize.myView', this._onWindowResize.bind(this));
p / s:在你的初始事件处理程序绑定中,你似乎已经交换了回调和事件,即resize
触发了私有点击方法,反之亦然。
更好:不再使用.bind()
,更新版本的jQuery建议使用.on()
,即:
$(window).on('resize.myView', this._onWindowResize.bind(this));