Как переопределить текущую функцию, если она снова вызывается в jQuery? - PullRequest
2 голосов
/ 28 января 2012

У меня есть эта функция, которая срабатывает, если пользователь нажимает div. Пользователь может многократно нажимать на этот div, вызывая функцию много раз.

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

Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 28 января 2012

Сколько времени занимает выполнение вашей функции? Похоже, что вы в конечном итоге хотите уменьшить щелчки, так что только один зарегистрирован каждые X секунд / миллисекунд. Лучший способ сделать это - отложить выполнение функции от щелчка, используя setTimeout, а затем очистить этот таймаут каждый раз, когда пользователь нажимает. Поэтому, если они нажмут 3 раза за одну секунду, он будет выполнен только один раз.

Пример: функция не будет запускаться чаще одного раза в секунду

var timeout;

function myClickHandler(){
    clearTimeout(timeout);
    timeout = setTimeout(function(){
        // Execute your code here
    }, 1000); // 1000ms delay
};
3 голосов
/ 28 января 2012

Javascript является однопоточным.Таким образом, вторые клики не будут обрабатываться, пока javascript, прикрепленный к первому клику, не будет завершен.

Подробнее о том, как работает очередь событий javascript, можно прочитать здесь: Как JavaScript обрабатывает ответы AJAX вфон?

Если вы используете асинхронные операции, такие как анимации jQuery, то они запускаются небольшими частями без таймеров, и вы можете получать последующие нажатия кнопок во время запуска анимации.В этом случае вам нужно будет остановить анимацию.В jQuery вы бы использовали метод .stop(true, true), чтобы остановить текущую анимацию, продвинуть ее до завершения и очистить из очереди.

Если вы включите свой фактический код, мы могли бы дать более конкретный ответ для вашегоситуация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...