2009-06-02 5 views
8

jquery 함수를 클릭하면 div를 볼 때 설정 시간 제한이 발생합니다.설정된 시간 전에 setTimeout 함수를 끝내십시오.

그러나 settimeout 길이 동안 다른 옵션을 선택하면이 함수를 파괴하는 방법을 알기를 원합니다.

내 현재 코드는 다음과 같습니다

$(document).ready(function(){ 

$('li#contact').click(function() { 
     $('ul.image_display').css('display', 'none'); 
     $('ul.projects').fadeOut().hide(); 
     $('li#cv').removeClass('cur'); 
     $('li#projects').removeClass('cur'); 
     $('li#contact').addClass('cur'); 
     $('ul.contact').fadeIn(function() 
         { 
         setTimeout(function() 
         { 
         $('ul.contact').fadeOut('slow'); 
         }, 8000); 
         }); 
     setTimeout(function() { 
      $('li#contact').removeClass('cur'); 
      $('li#cv').addClass('cur'); 
      $('ul.projects').fadeIn('slow'); 
      $('ul.image_display').css('display', 'block'); 
      }, 8625); 

}); 

}); 

조금 복잡하지만,이 클릭 할 때까지 작동합니다 : 두 번째가 바로 클래스 '똥개'보다 여전히 온다 첫째 후 클릭

$(document).ready(function(){ 

$('#projects').click(function() { 
     $('li#cv').removeClass('cur'); 
     $('ul.contact').fadeOut().hide(); 
     $('#contact').removeClass('cur'); 
     $('ul.projects').fadeIn('slow'); 
     $('#projects').addClass('cur'); 
     $('ul.image_display').css('display', 'block'); 
}); 

}); 

경우 li # cv에서 설정 시간 후.

이것이 의미가 있습니까?

희망 사항!

+0

나는이 코드가 엉덩이를 빨아 먹는다는 것을 알고 있지만, 나는이 전체 jquery malarkey에 대해 여전히 새로운 것입니다! – DanC

+0

그런데 setTimeout은 jQuery (제목에 관한)와는 아무런 관련이없는 javascript 함수입니다 :) –

+0

어쩌면 왜 jquery 문서에서 아무 것도 찾을 수 없었습니다. 건배는 – DanC

답변

18

setTimeout 함수는 해당 시간 초과에 대한 식별자를 반환합니다. 그런 다음 clearTimeout 기능으로 해당 제한 시간을 취소 할 수 있습니다. 따라서 다음과 같이 할 수 있습니다 (코드로 공백을 채우십시오).

var timer; 
$(function() { 
    $(...).click(function() { 
     ... 
     timer = setTimeout(...); 
     ... 
    }); 

    $(...).click(function() { 
     clearTimeout(timer); 
    }); 
}); 

그러나이 작업을 위해 전역 변수를 유지하는 것은 특별히 훌륭합니다. 상황에 가장 적합한 요소가 무엇이든 data 속성에 타이머를 저장할 수 있습니다. 이런 식으로 뭔가 :

$(function() { 
    $(...).click(function() { 
     ... 
     var timer = setTimeout(...); 
     $(someelement).data('activetimer', timer); 
     ... 
    }); 

    $(...).click(function() { 
     var timer = $(someelement).data('activetimer'); 
     if(timer) { 
      clearTimeout(timer); 
      $(someelement).removeData('activetimer'); 
     } 
    }); 
}); 

정말 청소기 보이지 않지만,

+0

미안 해요, 제게 약간 정교 할 수 있겠어요? 코드에 어디에 넣을까요? – DanC

+1

타임 아웃을 설정할 때 setTimeout의 반환 값을 변수 (예 : "timer")에 저장하십시오. 끝내고 싶으면 "timer"에 clearTimeout()을 호출하면 임박한 이벤트가 취소됩니다. Timeout 이벤트를 미리 발생시키지 않을 것이고, 결코 일어나지 않을 것입니다. 그래서 Timeout으로 들어가는 코드가 다른 방식으로 실행되도록 프로그래밍해야합니다. – Hober

+0

굉장! 이 위대한 작품! 도움에 대한 환호! – DanC

3

당신은 그렇게 clearTimeout()을 사용할 수 있습니다 ... 타이머를 저장하는 또 다른 방법입니다. 변수의 setTimeout()에서 반환 값을 clearTimeout()으로 전달해야합니다.

+0

도움, 친구, 환호! – DanC

관련 문제