如何在使用jQuery单击后仅添加一次数据

时间:2013-01-23 08:51:00

标签: javascript jquery timeout append

所以,我有这个小功能:

carousel_controls_buttons.live('click', function(e){
    setTimeout(function(){
       info_board_span.append(info_board_description);
       e.preventDefault();
    }, 450);
});

我要做的是在两次,三次快速点击后停止追加info_board_description次。当我这样做时,这个数据不止一次附加,我有内容重复。我怎么能停止这一段时间,比如说。这450ms?谢谢你的帮助。

5 个答案:

答案 0 :(得分:3)

使用布尔值来控制它。

var flag = true;
carousel_controls_buttons.live('click', function(e){
    e.preventDefault();
    if (flag) {
       setTimeout(function(){
           info_board_span.append(info_board_description);
           flag = true;
       }, 450);
       flag = false;
    }
});

答案 1 :(得分:2)

您可以使用clearTimeout功能:

var t = '';
carousel_controls_buttons.live('click', function(e){
    clearTimeout(t);
    t = setTimeout(function(){
          info_board_span.append(info_board_description);
          e.preventDefault();
    }, 450);
});

示例:http://jsfiddle.net/xhSvC/

请注意,live方法已弃用,您应该使用on方法。

答案 2 :(得分:1)

虽然其他答案应该有效,但我想向您介绍debounce&的概念。 throttle

http://benalman.com/projects/jquery-throttle-debounce-plugin/是一个可用于实现所需内容的插件,即确保每x秒仅执行一次函数。

  

节气门与去抖动

     

限制和去抖动都会限制执行a   功能,但适合特定情况?

     

嗯,简单地说:虽然限制限制执行a   每个延迟毫秒的功能不超过一次,去抖动   保证该功能只能一次执行   (给定一个指定的阈值)。

carousel_controls_buttons.live('click', function(e) {
    $.debounce(450, function() {
       info_board_span.append(info_board_description);
       e.preventDefault();
    });
});

答案 3 :(得分:0)

在那里计算一下var count = 0;在命中时递增并检查条件如果count == 1如果不离开则附加它

答案 4 :(得分:0)

实现这一目标有一个事件:

carousel_controls_buttons.one('click', function() {
  setTimeout(function(){
       info_board_span.append(info_board_description);
       e.preventDefault();
    }, 450);
});