JQuery在hover(in)状态下添加click事件的多次触发现象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>event多次触发</title><style type="text/css"> .out { width:100px; height:100px; padding:10px; border:solid 1px #CCC; } .inner { width:50px; height:50px; border:solid 1px #555; } .show { background:#EEE; width:200px; height:200px; padding:10px; margin-top:20px; border:solid 1px #F00; }</style><script type="text/javascript" src="js/jQuery-1.7.1.js"></script><script type="text/javascript"> $(function() { var num_c = 0; //记录click事件触发次数 var num_i = 0; //记录hover(in)事件触发次数 var num_o = 0; //记录hover(out)事件触发次数 var html = ''; //显示在.show中的信息 $('.out').hover(function() { $(this).css('border' , 'solid 1px #F00'); $('.inner').click(function() { num_c += 1; $('.show').html(num_c); }); num_i += 1; } , function() { $(this).css('border' , 'solid 1px #CCC'); num_o += 1; html += 'hover(in)触发次数为:' + num_i + '<br />'; html += 'hover(out)触发次数为:' + num_o + '<br />'; html += 'click触发次数为:' + num_c + '<br />'; $('.show').html(html); init(); }); //初始化 function init() { num_c = 0; //记录click事件触发次数 num_i = 0; //记录hover(in)事件触发次数 num_o = 0; //记录hover(out)事件触发次数 html = ''; //显示在.show中的信息 } });</script></head><body><div class="out"> <div class="inner"></div></div><div class="show"></div></body></html>
$('.out').hover(function() { $(this).css('border' , 'solid 1px #F00'); $('.inner').click(function() { num_c += 1; $('.show').html(num_c); });
[解决办法]
看了他解决方案里的聊天记录,就是说他原本想要的是每次点击触发一次click事件,然后num_c加1。但是他的代码有问题,然后每次触发hover的时候就会多绑定一次click事件,导致的结果是每次点击触发click事件就是触发N次,num_c的值加了N
[解决办法]
冒泡了?
在接着这句 num_i += 1; 下面加一句
return false; 再试一下
或是把hove改为mouseenter好像