日期:2014-05-16  浏览次数:20470 次

JQuery在hover(in)状态下添加click事件的多次触发现象
HTML code
<!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>



当第一次hover并点击的时候,click为1。

每当click一次后,下一次click触发次数将+1(不完全规律,没仔细测过,但是多次触发是一定的现象)

如图,为我click了多次后,显示的各事件触发次数。




这一现象让我很费解,求大侠们帮忙解释下……

------解决方案--------------------
说实在的,我看了你的例子,看了你说的解决方案。还是没搞明白你想要做什么的

------解决方案--------------------
JScript code

$('.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好像