日期:2014-05-16 浏览次数:20470 次
<!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好像