因为一个bind函数,未解绑成功导致事件叠加,搞了一下午。
keyup事件绑定:
this.$document.on('keyup', this.keyUp.bind(this));
原解绑函数:
this.$document.off('keyup', this.keyUp);
修正函数:
this.$document.off('keyup');
正如参考链接所提到的API(未详查):
bind方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数.
bind会创建一个新函数绑定到keyup上,此时绑定的函数已经不是自定义的keyup,而是和它功能一样的一个匿名函数(据我推导)。而在解绑的时候,第二个参数是自定义的this.keyUp。但是keyup绑定的并不是this.keyUp,导致未能解绑,以致于函数事件叠加。如果keyup每次自增1,关闭之后再打开就变成自增2,在关闭再打开就变成自增3,以此类推。
参考链接:Javascript通过bind()掌控this (http://blog.csdn.net/rznice/article/details/26134201)