请教 jq 的 $(window).on 和 $(window).off 事件?

请问我,绑定以下事件:
$(window).on("resize" , window.a\_function ); // 绑定 $(window).resize 监听事件 ;
$(window).on("scroll", window.a\_function ); // 绑定 $(window).scroll 监听事件 ;
$(window).resize(window.b\_function ); // 绑定 $(window).resize 监听事件 ;
$(window).scroll(window.b\_function ); // 绑定 $(window).scroll 监听事件 ;
然后使用 off 解除 a 函数的绑定:
$(window).off("resize" , window.a\_function ); // 绑定 $(window).resize 监听事件 ;
$(window).off("scroll", window.a\_function ); // 绑定 $(window).scroll 监听事件 ;

实际使用的时候,
off 为什么会导致 $(window).resize(window.b\_function ); 和 $(window).scroll(window.b_function ); 也失效;
请问是为什么啊?

我测试的时候,在浏览器中调试台中实际测试,证明确实会导致 b 函数失效

看了 jq 的源代码,off 依赖 jQuery.event.remove( this, types, fn, selector ); 也没有看出头绪来。

阅读 4.3k
2 个回答

好吧,我灵光一闪,好像是搞明白了,
执行,$(window).off("resize" , window.a_function ); 的时候,如果 window.a_function 未定义;
就相当于执行 $(window).off("resize" ); 所以导致 $(window).off("resize" , window.b_function ); 的 b 函数也失效了;

$().resize === $().on('resize')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题