如何避免jquery .click()事件垃圾邮件

时间:2015-01-22 20:28:44

标签: jquery events triggers click spam

我想知道如何保护jQuery .click()(或其他)事件到spawm。 我在JSFiddle中创建了一个项目文件,你可以在上面设置它。如果您始终可以点击<body>下一个<li>项,则始终获得.curr-str课程,但动画尚未完成。

我试试这个:

    if($('body').is(':animated'){
alert("animate is progress, wait");
}

但它不起作用......

测试代码:

HTML:

<div class="list">

    <ul>
        <li class="curr-str">JavaScript</li>
         <li>JavaScript</li>
         <li>JavaScript</li>
         <li>JavaScript</li>

    </ul>

</div>

CSS:

.curr-str{
    background-color:green;
}

使用Javascript:

$( 'body' ).click(function() {
    $current = $(".curr-str");
  $( $current ).next('li').addClass('curr-str').fadeOut(5000);
});

JSFiddle

1 个答案:

答案 0 :(得分:2)

使用.one()代替.click()并在.fadeOut()的完整回调中重新注册事件处理程序

$(function () {
    var body = $("body");
  
    body.one("click", removeListElement);

    function removeListElement() {
        var current = $(".curr-str");
        $(current).next('li').addClass('curr-str').fadeOut(5000, function() {
            body.one("click", removeListElement);
        });
    }
});
.curr-str {
    background-color:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="list">
    <ul>
        <li class="curr-str">JavaScript</li>
        <li>JavaScript</li>
        <li>JavaScript</li>
        <li>JavaScript</li>
    </ul>
</div>