点击的Javascript不适用于setInterval

时间:2012-08-07 20:01:22

标签: javascript jquery html onclick

我有以下代码 -

 <html>
<head>
<title>Rebound</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">


    function ShowRandom() {
        var $span = $(".random");
        var oldTop = 0;
        var oldLeft = 0;
        var leftPos = 10;
        var topPos = 10;
        var flag = true;

        $(".random").on("click", "#lion", function(event) {
                alert(event.target.id);
            }); 

        $span.fadeOut(500, function() {

            var maxLeft = $(window).width() - $span.width();
            var maxTop = $(window).height() - $span.height();

            oldTop = topPos;
            oldLeft = leftPos;

            leftPos = Math.floor(Math.random() * (maxLeft + 1));
            topPos = Math.floor(Math.random() * (maxTop + 1));          

            $span.css({ left: leftPos, top: topPos }).fadeIn(500);
        });
    };
    ShowRandom();
    setInterval(function(){         
        $('.random').append("<span class='lab'></span>");
        ShowRandom(); 
    }, 1500);
     $('.random').delegate('.lab', 'click', function() {
        $('.random').remove('.lab');
        alert('single event trigger');
    });


</script>
<style>
    span { 
        display: inline-block; 
        position: absolute;
    }
</style>
</head>
<body>
    <div id="container">
        <span class="random"><img src="lion.jpg" width="50px" height="50px" id="lion"></span>

    </div>
</body>
 </html>

单击图像时,我只想要一个警告框。但我得到了多个警报框。有办法吗?

谢谢

2 个答案:

答案 0 :(得分:4)

因为您在每个时间间隔都保持连接点击事件。

每个内部你添加另一个事件,它不会覆盖前一个事件。

答案 1 :(得分:1)

尝试移动

$(".random").on("click", "#lion", function(event) {
     alert(event.target.id);
}); 

在ShowRandom函数之外。

例如:

function ShowRandom(){...};

$(function(){

   $(".random").on("click", "#lion", function(event) {
         alert(event.target.id);
    }); 

    ShowRandom();

    setInterval(function(){
        $('.random').append("<span class='lab'></span>");
        ShowRandom(); 
    }, 1500);

    ...

});