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