문제

다음 코드가 있지만 명확한 타임 아웃은 작동하지 않으며 이유를 이해할 수 없습니다. 누구든지 아이디어가 있습니까? (프로토 타입 프레임 워크 사용)

function foo() {
    $("navigation").observe('mouseover',
        function (event) {
            clearTimeout(bar);
        }
    ).observe('mouseout',
        function (event) {
            setTimeout(bar, 1000);
        }
    );
}

function bar() {
    alert("hi");
}
도움이 되었습니까?

해결책

결과를 저장해야합니다 setTimeout 변수에서 사용합니다 clearTimeout 기능이 아닌 변수를 지우려면 다음과 같습니다.

var timer;

function foo() {
    $("navigation").observe('mouseover',
        function (event) {
                clearTimeout(timer);
        }
    ).observe('mouseout',
        function (event) {
                timer = setTimeout(bar, 1000);
        }
    );
}

function bar() {
    alert("hi");
}

다른 팁

때문에 clearTimeout 기능은 논증을 취합니다 반환 에 의해 setTimeout 기능:

var t = null;
function foo() {
    $("navigation").observe('mouseover',
        function (event) {
            if (t != null) clearTimeout(t);
        }
    ).observe('mouseout',
        function (event) {
            t = setTimeout(bar, 1000);
        }
    );
}

function bar() {
    alert("hi");
}

Mozilla 문서를 참조하십시오 window.settimeout ():

Settimeout은 실제로 사용할 수있는 참조를 반환합니다. 타임 아웃을 지우십시오:

tId = setTimeout(bar, 1000);
clearTimeout(tId);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top