복붙노트

[JQUERY] SetTimeout / ClearTimeout 문제

JQUERY

SetTimeout / ClearTimeout 문제

해결법


  1. 1.함수 밖에서 타이머를 선언해야합니다. 그렇지 않으면 각 함수 호출에서 새로운 변수를 얻습니다.

    함수 밖에서 타이머를 선언해야합니다. 그렇지 않으면 각 함수 호출에서 새로운 변수를 얻습니다.

    var timer;
    function endAndStartTimer() {
      window.clearTimeout(timer);
      //var millisecBeforeRedirect = 10000; 
      timer = window.setTimeout(function(){alert('Hello!');},10000); 
    }
    

  2. 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. 3.타이머가 기능의 로컬 변수이기 때문입니다.

    타이머가 기능의 로컬 변수이기 때문입니다.

    함수 외부에서 만들 것을 시도하십시오.


  4. 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. 5.이것이 좋은 연습 규칙을 위반하는지 확실하지는 않지만 일반적 으로이 방법으로 나옵니다.

    이것이 좋은 연습 규칙을 위반하는지 확실하지는 않지만 일반적 으로이 방법으로 나옵니다.

    if(typeof __t == 'undefined')
            __t = 0;
    clearTimeout(__t);
    __t = setTimeout(callback, 1000);
    

    이렇게하면 타이머를 기능에서 선언 할 필요가 없습니다.

    편집 : 또한 각 호출에서 새로운 변수를 선언하지 않지만 항상 동일하게 재활용합니다.

    도움이 되었기를 바랍니다.


  6. 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. 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
        );
    });
    
  8. from https://stackoverflow.com/questions/3015319/settimeout-cleartimeout-problems by cc-by-sa and MIT license