我写了如下的代码:
function wrap(){
$('.major').on('click',function(){
alert('1');
});
};
$('#btn').on('click',wrap);
想实现当点击#btn按钮然后再点击.major时弹出1,但是这样写后,当多次点击#btn按钮然后再点击.major后会弹出多次1,请问这是怎么回事?难道通过on绑定多次,触发的时候就会执行多次吗?
那我该如何改进呢?
这是因为你每点击一次#btn就为.major绑定了一次click事件
用
object.onclick=function(){};
这种格式只执行最后一次绑定那你就不该用
on
,该用once
btn是在major里面吗?如果是,由于事件冒泡,major也会触发点击事件,需要阻止事件冒泡。
是的,你已經回答了你的問題了,當你每執行一次
wrap
就等於再次綁定一個click
事件,並不是說清掉之前的在綁定。可以先清除綁定,這樣就不會綁定多次了。
你这样写点击此
#btn
就会绑定几次.major
,正确写法应该要定义一个控制器unbind('click')
加个状态判断:
var hasWrap = false;
function wrap(){
};
$('.major').on('click',function(){
});
$('#btn').on('click',wrap);