[JQUERY] SetTimeout / ClearTimeout 문제
JQUERYSetTimeout / ClearTimeout 문제
해결법
-
1.함수 밖에서 타이머를 선언해야합니다. 그렇지 않으면 각 함수 호출에서 새로운 변수를 얻습니다.
함수 밖에서 타이머를 선언해야합니다. 그렇지 않으면 각 함수 호출에서 새로운 변수를 얻습니다.
var timer; function endAndStartTimer() { window.clearTimeout(timer); //var millisecBeforeRedirect = 10000; timer = window.setTimeout(function(){alert('Hello!');},10000); }
-
2.문제는 타이머 변수가 로컬이고 각 함수 호출 후 해당 값이 손실된다는 것입니다.
문제는 타이머 변수가 로컬이고 각 함수 호출 후 해당 값이 손실된다는 것입니다.
당신은 그것을 지속시켜야하거나, 당신이 함수 밖에서 그것을 넣을 수 있거나 변수를 글로벌로 노출시키지 않으려면 폐쇄, 예를 들어, 그것을 저장할 수 있습니다.
var endAndStartTimer = (function () { var timer; // variable persisted here return function () { window.clearTimeout(timer); //var millisecBeforeRedirect = 10000; timer = window.setTimeout(function(){alert('Hello!');},10000); }; })();
-
3.타이머가 기능의 로컬 변수이기 때문입니다.
타이머가 기능의 로컬 변수이기 때문입니다.
함수 외부에서 만들 것을 시도하십시오.
-
4.반응에서 이것을 사용하는 방법 :
반응에서 이것을 사용하는 방법 :
class Timeout extends Component { constructor(props){ super(props) this.state = { timeout: null } } userTimeout(){ const { timeout } = this.state; clearTimeout(timeout); this.setState({ timeout: setTimeout(() => {this.callAPI()}, 250) }) } }
사용자가 예를 들어 입력을 중지 한 후에 만 API를 호출하고 싶다면 유용합니다. usertimeout 함수는 onkeyup을 통해 입력에 바인딩 될 수 있습니다.
-
5.이것이 좋은 연습 규칙을 위반하는지 확실하지는 않지만 일반적 으로이 방법으로 나옵니다.
이것이 좋은 연습 규칙을 위반하는지 확실하지는 않지만 일반적 으로이 방법으로 나옵니다.
if(typeof __t == 'undefined') __t = 0; clearTimeout(__t); __t = setTimeout(callback, 1000);
이렇게하면 타이머를 기능에서 선언 할 필요가 없습니다.
편집 : 또한 각 호출에서 새로운 변수를 선언하지 않지만 항상 동일하게 재활용합니다.
도움이 되었기를 바랍니다.
-
6.이것은 잘 작동합니다. 보류 이벤트를 다루기 위해 만든 관리자입니다. 보류 이벤트가 있으며, 가자 할 때
이것은 잘 작동합니다. 보류 이벤트를 다루기 위해 만든 관리자입니다. 보류 이벤트가 있으며, 가자 할 때
function onUserHold(element, func, hold, clearfunc) { //var holdTime = 0; var holdTimeout; element.addEventListener('mousedown', function(e) { holdTimeout = setTimeout(function() { func(); clearTimeout(holdTimeout); holdTime = 0; }, hold); //alert('UU'); }); element.addEventListener('mouseup', clearTime); element.addEventListener('mouseout', clearTime); function clearTime() { clearTimeout(holdTimeout); holdTime = 0; if(clearfunc) { clearfunc(); } } }
요소 매개 변수는 사용자가 보유하고있는 것입니다. FUNC 매개 변수는 매개 변수 보류에 의해 지정된 수당 밀리 초 동안 보유 할 때 발생합니다. ClearFunc Param은 선택 사항이며 사용자가 사용자가 요소를 떠나거나 남길 수있는 경우 해고됩니다. 원하는 기능을 얻으려면 작업 주위를 수행 할 수도 있습니다. 즐겨! :)
-
7.드롭 다운 메뉴를 위해 jQuery를 사용하는 실제 예제! #iconloggedinuxexternal over over-div # ExternalMenUlogin을 보여주고 DIV # ExternalMenUlogin을 숨기기 위해 시간을 설정합니다.
드롭 다운 메뉴를 위해 jQuery를 사용하는 실제 예제! #iconloggedinuxexternal over over-div # ExternalMenUlogin을 보여주고 DIV # ExternalMenUlogin을 숨기기 위해 시간을 설정합니다.
DIV # ExternalMenulogin에서 마우스 오버 타임 아웃을 취소합니다. Div # ExternalMenulogin에서 마우스 밖으로 나오는 시간 초과를 설정합니다.
여기서는 시간 초과를 설정하기 전에 항상 ClearTimeout을 호출하는 것이 항상 이중 호출을 피하십시오.
var ExternalMenuLoginTO; $('#IconLoggedinUxExternal').on('mouseover mouseenter', function () { clearTimeout( ExternalMenuLoginTO ) $("#ExternalMenuLogin").show() }); $('#IconLoggedinUxExternal').on('mouseleave mouseout', function () { clearTimeout( ExternalMenuLoginTO ) ExternalMenuLoginTO = setTimeout( function () { $("#ExternalMenuLogin").hide() } ,1000 ); $("#ExternalMenuLogin").show() }); $('#ExternalMenuLogin').on('mouseover mouseenter', function () { clearTimeout( ExternalMenuLoginTO ) }); $('#ExternalMenuLogin').on('mouseleave mouseout', function () { clearTimeout( ExternalMenuLoginTO ) ExternalMenuLoginTO = setTimeout( function () { $("#ExternalMenuLogin").hide() } ,500 ); });
from https://stackoverflow.com/questions/3015319/settimeout-cleartimeout-problems by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] jQuery는 양식을 제출 한 다음 기존 DIV에서 결과를 표시합니다. (0) | 2020.10.30 |
---|---|
[JQUERY] 오류 : 액세스 제어 허용 헤더에서는 요청 헤더 필드 콘텐츠 형식이 허용되지 않습니다. (0) | 2020.10.30 |
[JQUERY] HTML 요소를 드래그 앤 드롭 사용 중지 하시겠습니까? (0) | 2020.10.30 |
[JQUERY] ASP.NET WebForms를 사용하여 Ajax 용 jQuery를 사용합니다 (0) | 2020.10.30 |
[JQUERY] 세트 가시성의 jQuery .hide ()의 등가 : 숨겨진 (0) | 2020.10.30 |