84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
我写了如下的代码:
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);