JavaScript clearTimeout이 작동하지 않습니다.
(유사한 질문/답변을 모두 살펴보았지만 어느 것도 제 문제를 해결하지 못합니다.
코드:
var timeoutHandle;
function showLoader(show) {
if (show) {
$('.loader').html('Loading...');
$('.loader').show();
timeoutHandle = setTimeout(function () {
if ($('.loader').is(':visible')) {
$('.loader').html('Still loading...');
}
}, 15000);
}
else {
$('.loader').hide();
clearTimeout(timeoutHandle);
}
}
AJAX 함수는 단순히 다음을 호출합니다.showLoader(true)
서버에 전화하기 전에, 그리고 나서.showLoader(false)
결과적으로아직도 가끔 "로딩 중.."에서 텍스트가 변경되는 경우가 있습니다.." "아직 로딩중입니다..." 15초 훨씬 전에 타이머 스레드가 아직 실행 중인 것 같습니다.위의 코드에 문제가 있습니까?아니면 다른 코드에 문제가 있을 수도 있습니다.
edit: 추가해야 합니다.showLoader(true)
서버에서 응답하기 전에 다시(그리고 다시) 호출할 수 있습니다.
당신은 체크를 추가해서 이미 존재하는지 확인해야 합니다.timeoutHandle
새로운 것을 만들기 전에.
시도해 보십시오.
if(timeoutHandle){
clearTimeout(timeoutHandle);
timeoutHandle = null;
}
timeoutHandle = setTimeout(function () {
if ($('.loader').is(':visible')) {
$('.loader').html('Still loading...');
}
}, 15000);
그리고 또 다른 경우에는timeoutHandle
다음과 같이 삭제한 후 null로 변경합니다.
clearTimeout(timeoutHandle);
timeoutHandle = null;
이렇게 하면 다음과 같은 경우에 동시에 타임아웃을 생성할 수 있는 기회가 사라집니다.showLoader(true)
함수를 두 번 이상 호출합니다.
여러 개의 전화를 걸고 있는 경우가 있습니다.showLoader
이 기능은 글로벌 기능이기 때문에 어디서나 액세스할 수 있기 때문에 일반적으로 원하지 않습니다.
모나드 구현으로 변경하는 것을 고려해 보겠습니다.
function create_loader(elem) {
var handle = null;
function show() {
elem.html('Loading...');
elem.show();
if (handle !== null) {
clearTimeout(handle); // clear the previous one
}
handle = setTimeout(function () {
elem.html('Still loading...');
}, 15000);
}
return {
show: show,
clear: function () {
elem.hide();
clearTimeout(handle);
handle = null;
}
};
}
용도:
var loader = create_loader($(".loader"));
loader.clear();
loader.show();
loader.show(); // each new call to show will reset the 15s timer
loader.show();
loader.show();
loader.clear();
// and you can make another one that operates independently of other one
var another_loader = create_loader($(".anotherLoader"));
이제 당신은.loader
자신의 상태를 알고 있는 물체입니다.
당신의 게시물에서 쇼로더는 첫 번째 반환 전에 여러 번 호출될 수 있다고 언급합니다.이것은 당신의 문제입니다.기존의 핸들을 파괴하지 않고 새 핸들로 기존의 timeoutHandle을 덮어씁니다.새로 생성하기 전에 timeoutHandle이 설정되어 있는지 확인해야 합니다.
clearTimeout(timeoutHandle)을 호출하지 않은 다음 timeoutHandle이 있는 경우 새 요청을 시작합니다.
언급URL : https://stackoverflow.com/questions/17368453/javascript-cleartimeout-not-working
'programing' 카테고리의 다른 글
php_network_getaddresses: 도커의 관리자에서 getaddrinfo 오류가 발생했습니다. (0) | 2023.11.04 |
---|---|
숫자가 아닌 텍스트를 보여주기 위해 집계 없이 엑셀로 피벗? (0) | 2023.11.04 |
각도를 분할하는 방법JS를 작은 모듈에 적용하고 라우팅을 올바르게 처리합니까? (0) | 2023.11.04 |
저장 프로시저에서 파라미터를 검색하시겠습니까? (0) | 2023.11.04 |
셸 스크립트를 사용하여 여러 MySQL 명령을 실행하는 더 나은 방법 (0) | 2023.11.04 |