Jquery 中关键事件绑定的 On 和解除绑定 Off 的疑惑

hello___world___! 2015-09-24 05:07:51
举个很简单的例子,

要求:1. 给 $(window) 的resize事件,绑定三个处理函数
2. 当点击某个按钮时,删除resize事件中的其中一个处理函数。


我是这样写的:

<script type="text/javascript">

/*********************
* 预先定义三个函数
*********************/
function func1(msg){
alert(msg);
}

function func2(msg){
alert(msg);
}

function func3(msg){
alert(msg);
}

$(function(){

//这一步顺利执行,依次弹出了相关数据
$(window).on("resize",function(){
func1("1");
func2("2");
func3("3");
});

//这里,解除绑定失败了,func1函数依然会执行,说明没有去掉
$("#btn-close").click(function(){
$(window).off("resize",func1);
});


});

</script>


那么问题裸露出来了。。。。。。
我明明给resize事件绑定了三个处理方法,我为什么无法用 Off函数解除其中函数


为了实现开头所述的要求,我只能用笨法来做,是这样滴:

$(function(){

//先把所有的函数都绑定进去
$(window).on("resize",function(){
func1("1");
func2("2");
func3("3");
});

//为了要删除其中一个方法:func1,那么我要先把整个resize事件的所有方法都删除掉,然后再重新把需要的绑定进去
$("#btn-close").click(function(){
$(window).off("resize");
$(window).on("resize",function(){
func2("2");
func3("3");
});
});


});


虽然我使用了笨法,能勉强完成任务,但是我感觉这一点都不优雅,完全给Jquery的风格拖后腿
我梦想中的方式应该是这样滴:
$(window).on("resize",func1("1"),func2("2"),func3("3"));
$(window).off("resize",func1);

但是根本就不行,跑都跑不起来。。再次陷入迷茫。。。

我想,一定有个更好的办法来处理,求各路大神指教!
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincentguo_ 2015-09-25
  • 打赏
  • 举报
回复
jq网站的例子,不是正好解决你的问题么



var $test = $( "#test" );
 
function handler1() {
  console.log( "handler1" );
  $test.off( "click", handler2 );
}
 
function handler2() {
  console.log( "handler2" );
}
 
$test.on( "click", handler1 );
$test.on( "click", handler2 );
In the code above, handler2 will be executed anyway the first time even if it's removed using .off(). However, the handler will not be executed the following times the click event is triggered.
KK3K2005 2015-09-24
  • 打赏
  • 举报
回复
闭包理解的欠缺
zpjshiwo77 2015-09-24
  • 打赏
  • 举报
回复
看看手册吧http://hemin.cn/jq/off.html 首先 $(window).off("resize",func1);这种写法肯定不对,格式为$("p").off( "click", "**" )你没有双引号。
引用
selector:一个最初传递到.on()事件处理程序附加的选择器。
注意是选择器,不是函数,所以你那种想法应该不能实现吧。
zpjshiwo77 2015-09-24
  • 打赏
  • 举报
回复
$(window).off("resize",func1);你确定有这样的写法吗? 只有这样的写法吧: $(window).off("resize",func1("1")); 然而这句话的解释是先关掉“resize”这个事件,然后执行函数func1("1")。

87,926

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧