84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我写了如下的代码:
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(){};这种格式只执行最后一次绑定
object.onclick=function(){};
那你就不该用on,该用once
on
once
function wrap(){ $('.major').once('click',function(){ alert('1'); }); }; $('#btn').on('click',wrap);
还有你那个代码贴的那叫一难看,提问时注意下格式。你提的漂亮、干净,别人回答的也会快点(不用脑补代码正确格式了)
btn是在major里面吗?如果是,由于事件冒泡,major也会触发点击事件,需要阻止事件冒泡。
是的,你已經回答了你的問題了,當你每執行一次wrap就等於再次綁定一個click事件,並不是說清掉之前的在綁定。
wrap
click
可以先清除綁定,這樣就不會綁定多次了。
function wrap(){ var onClick = function() { alert('1'); } $('.major').off('click').on('click', onClick); }; $('#btn').on('click', wrap);
你这样写点击此#btn就会绑定几次.major,正确写法应该要定义一个控制器
#btn
.major
var con = false; $('#btn').on('click',function(){ con = true; }) $('.major').on('click',function(){ if(con){ alert(1); con = false; } })
unbind('click')
加个状态判断:
var hasWrap = false;function wrap(){
hasWrap = true;
};$('.major').on('click',function(){
if(hasWrap)alert('1');
});$('#btn').on('click',wrap);
这是因为你每点击一次#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);