У меня есть div, который слушает событие «mouseenter» и запускает библиотечную функцию (которую я не могу редактировать) через 5 секунд (реализован с помощью setTimeout).Как остановить вызов функции Javascript внутри setTimeout после его увольнения?
Однако, если пользователь нажимает на div в течение этих 5 секунд, setTimeout следует отменить, а функция не должна запускаться (реализована с помощью clearTimeout). Щелчок также удалит элемент, на который опирается функция libraryFunction.
В настоящее время у меня есть код ниже:
var timeoutVar;
$("#mydiv").on("mouseenter", function(event) {
timeoutVar = setTimeout(function() {
runLibraryFunction(object);
}, 5000);
});
$("#mydiv").on("click", function(event) {
clearTimeout(timeoutVar);
removeObject(object);
});
Это работает по большей части, однако, есть крайний случай, когда DIV нажата только через 5 секунд, и в то время как runLibraryFunction() при выполнении. Поскольку событие «щелчок» удаляет объект, который требуется для функции runLibraryFunction, и это происходит при запуске runLibraryFunction, runLibraryFunction затем выдает ошибку.
Есть ли способ остановить вызов runLibraryFunction() после его увольнения?
Что необходимо удалить объект после нажатия? –
Это похоже на проблему XY. Что вы делаете с удалением 'removeObject()' в конце своей функции 'runLibraryFunction', когда это делается с ней? –
Я бы предположил, что внутри таймаута запускается событие click вместо функции вызова напрямую. Это сделает поток кода немного более чистым. Также после того, как вы нажали, вы можете установить флаг как 'processing' и только в его ложном состоянии, функции вызова. – Rajesh