Итак, у меня есть эта маленькая функция:

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

Я пытаюсь перестать добавлять info_board_description более одного раза за два, три быстрых клика. Когда я делаю это, эти данные добавляются более одного раза, и у меня дублируется контент. Как я могу остановить это на некоторое время, например это 450мс? Спасибо за помощь.

1
Lukas 23 Янв 2013 в 12:51

5 ответов

Лучший ответ

Вы можете использовать функцию 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
undefined 23 Янв 2013 в 09:00

Используйте логическое значение для управления им.

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;
    }
});
3
xdazz 23 Янв 2013 в 08:57

Хотя другие ответы должны работать, я хотел бы познакомить вас с концепцией debounce & throttle.

http://benalman.com/projects/jquery-throttle-debounce-plugin/ - это один плагин, который вы можете использовать для достижения того, что вам нужно, т. е. чтобы функция выполнялась только один раз в x секунд.

Дроссель против дебаза

И регулирование, и регулирование будут ограничивать скорость выполнения функции, но что подходит для данной ситуации?

Проще говоря, если регулирование ограничивает выполнение функции не более одного раза каждые миллисекунды с задержкой, отмена гарантирует, что функция будет выполняться только один раз (с учетом заданного порога).

carousel_controls_buttons.live('click', function(e) {
    $.debounce(450, function() {
       info_board_span.append(info_board_description);
       e.preventDefault();
    });
});
1
Amith George 23 Янв 2013 в 08:59

Поставьте отсчет там, скажем, var count = 0; увеличивайте при попадании и проверяйте условие, если count == 1 добавляйте его, если не оставляете его

0
Naveen 23 Янв 2013 в 08:56

Для этого есть одно событие:

carousel_controls_buttons.one('click', function() {
  setTimeout(function(){
       info_board_span.append(info_board_description);
       e.preventDefault();
    }, 450);
});
0
Tom Sarduy 23 Янв 2013 в 08:58