2012-10-23 3 views
7

좋아요. 그래서 저는 AJAX 애플리케이션에 사용자가 무엇을하고 있는지를 묻는 일정 시간 후에 툴팁을 코너에 붙이는 기능을 가지고 있습니다. 툴팁이 더 이상 관련이 없으므로 사용자가 다른 곳을 클릭하면 타임 아웃을 지우는 두 번째 기능이 있습니다.setTimeout의 배열을 지우십시오.

타임 아웃에 여러 툴팁을 설정하는 것과 관련하여 문제가 발생하기 시작했습니다. 설정하는 것은 괜찮지 만 사용자가 계속 이동하면 취소하는 효율적인 방법을 찾을 수 없습니다.

현재 내 코드는이

var tuttimer = new Array(); 

function showtooltip(uniqueid, delay){ 
    tuttimer[uniqueid] = setTimeout(function(){ 
     //Create tooltip code here 
    },delay); 
} 

function clearTuttimer(){ 
    if(typeof tuttimer != 'undefined'){ 
     for (var i = 0; i < tuttimer.length; i++) { 
      clearTimeout(tuttimer[i]); 
     } 
    } 
} 
그래서 tuttimer 배열 페이지로드에서 생성

과 같이 보이는 사용자는 showtooltip() 기능을 표시하는 툴팁을 구분 무언가를 호출을 수행하고 독특한 부여 될 때마다 이드와 지연 시간.

그러나 사용자가 다른 곳으로 이동할 경우 clearTuttimer() 함수를 호출하여 배열이 있는지 확인한 다음 루프백하고 각 시간 초과를 지 웁니다.

그러나 이것은 작동하지 않습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 많은 감사합니다.

답변

12

배열을 사용하는 경우 Array.push 메서드를 사용하십시오.

var tuttimer = []; 

function showtooltip(delay){ 
    tuttimer.push(setTimeout(function(){ 
     //Create tooltip code here 
    },delay)); 
} 

function clearTuttimer(){ 
    for (var i = 0; i < tuttimer.length; i++) { 
     clearTimeout(tuttimer[i]); 
    } 
} 

uniqueid을 사용하려면 배열 대신 개체를 사용하십시오.

var tuttimer = {}; 

function showtooltip(uniqueid, delay){ 
    tuttimer[uniqueid] = setTimeout(function(){ 
     //Create tooltip code here 
    },delay); 
} 

function clearTuttimer(){ 
    for (var k in tuttimer) { 
     clearTimeout(tuttimer[k]); 
    } 
} 
+0

위대한 사람이 될

function showtooltip(uniqueid, delay){ tuttimer[uniqueid] = setTimeout(function(){ //Create tooltip code here },delay); } 

를 수정했습니다. –

0

늘 그렇듯이 질문을 입력하면 내 방식의 오류가 나타납니다.

배열 키 워드를 미리 정의 된 값으로 설정하면 문제가 발생합니다. 그런 다음 루프 할 때 숫자 키를 찾고 있습니다. 이 문제를 극복하기 위해 나는 내 대답보다 더 깨끗

function showtooltip(uniqueid, delay){ 
    tuttimer.push(setTimeout(function(){ 
     //Create tooltip code here 
    },delay)); 
} 
관련 문제