首页 新闻 会员 周边

为什么这个$().on("click",alter("aaa"))只执行一次

1
悬赏园豆:10 [已解决问题] 解决于 2016-04-13 13:30
 1 $(document).ready(function(){
 2 //   this can work well
 3   // $("button").click(function(){
 4   //   $("p").slideToggle();
 5   // });
 6   
 7   $("button").on("click",toggle('p'));
 8   
 9   
10 })
11 
12 function toggle(obj){
13   $(obj).slideToggle();
14 }
View Code
1 <p>这是一个段落。</p>
2 <button>切换</button>
小kk06的主页 小kk06 | 初学一级 | 园豆:56
提问于:2016-04-13 11:53
< >
分享
最佳答案
0

注册事件时,第二个参数是事件处理函数。

当你$("button").on("click",toggle('p')); 这样写时。

等价于$("button").on("click", undefined);   为什么是undefined,因为toggle('p')的结果就是undefined。

当这段注册事件使用如上代码时,很明显之后的click,由于没有绑定function,所以就不会执行了。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2016-04-13 13:17

将函数返回值修改之后还是只能执行一次没有绑定事件 还是这样修改还是有问题?

function toggle(obj) {
    return $(obj).slideToggle();
}
小kk06 | 园豆:56 (初学一级) | 2016-04-13 13:26

@小kk06: 你这样修改,相当于return undefined,那不还是undefined嘛。所以结果是一样的。

要理解函数和函数结果的差异。

幻天芒 | 园豆:37175 (高人七级) | 2016-04-13 13:29

@幻天芒: 呀 一时心急忘了这个了 那什么时候可以在绑定事件的时候直接调用函数呢

小kk06 | 园豆:56 (初学一级) | 2016-04-13 13:30

@小kk06: 使用bind。

function test(){
   alert('test');  
}

$('#b1').click(test.bind());
幻天芒 | 园豆:37175 (高人七级) | 2016-04-13 14:56
其他回答(1)
0
$(document).ready(function() {
    //   this can work well
    // $("button").click(function(){
    //   $("p").slideToggle();
    // });

    $("button").on("click", function() {
        toggle('p');
    });
})

function toggle(obj) {
    $(obj).slideToggle();
}

你要的是這個

RosonJ | 园豆:4910 (老鸟四级) | 2016-04-13 12:01

我知道这样写可以,我的意思是为什么上面那么写不行?

支持(0) 反对(0) 小kk06 | 园豆:56 (初学一级) | 2016-04-13 12:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册