2012-08-08 64 views
0

我试图让一个jQuery甚至只触发一次该事件,但如果用户点击另一个元素,然后回到同一个它会再次触发。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(); 
}); 

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

更新:

的淡入和淡出也被关闭,在这里是从下方调整是否有人需要它的答案最终的工作代码。

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(); 
     }); 
    } 
}); 

回答

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(); 
    } 
}); 

有多种方法可以做到这一点。另一种方法是将元素添加(并删除)到元素中(如果需要,您也可以使用该元素进行样式化)。

+0

谢谢!这正是我想要的,并且正在玩弄,但我的代码已关闭。 – 2012-08-08 01:46:07