调整绑定后未触发的事件

时间:2018-03-18 11:00:21

标签: javascript jquery

我在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
    }
}

任何想法resizeclick事件之间有什么区别?

1 个答案:

答案 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));