0

我试图让 jQuery 甚至每次单击该事件只触发一次,但是如果用户单击另一个元素然后返回到同一个元素,它将再次触发。

例如:

$( '.summary' ).on( "touchstart mousedown", function(event) {
    var data_summary = $(this).attr('data-summary');
    $('#info').empty().stop(true, true).fadeOut().html('<p>'+data_summary+'</p>').fadeIn();
});

我知道 one(),但这将永久禁用它。这段代码的作用是在气泡中淡出,但如果用户多次单击它,我不希望它继续这样做。但是,如果用户单击另一个元素,它将淡入一个新元素,从而使前一个元素在单击后再次有效。

更新:

淡入和淡出也关闭了,这是下面答案中的最终工作代码,如果其他人需要,可以进行调整。

var prev = null;
$( '.summary' ).on( "touchstart mousedown", function(event) {
    if(this !== prev) {
        prev = this;
        var data_summary = $(this).attr('data-summary');
        $('#info').stop(true, true).fadeOut('fast', function() {
            $(this).html('<p>'+data_summary+'</p>').fadeIn();
        });
    }
});
4

1 回答 1

3

只需跟踪先前单击的元素:

var prev = null;
$( '.summary' ).on( "touchstart mousedown", function(event) {
    if(this !== prev) {
        prev = this;
        var data_summary = $(this).attr('data-summary');
        $('#info').empty().stop(true, true).fadeOut().html('<p>'+data_summary+'</p>').fadeIn();
    }
});

有多种方法可以做到这一点。另一种方法是向元素添加(和删除)一个类(如果需要,您还可以使用它来设置它的样式)。

于 2012-08-08T00:49:44.080 回答