2011-12-08 6 views
5

3 개의 div (#Mask #Intro #Container)가 있으므로 마스크를 클릭하면 Intro가 숨겨지고 Container가 나타납니다. 문제는 페이지를 새로 고칠 때마다 또는 메뉴 나 링크 등을 클릭 할 때마다 한 번만로드하려는 것이 아니라는 것입니다.함수를 한 번만 호출하십시오.

어떻게하면됩니까?

$(document).ready(function(){ 
    $("div#mask").click(function() { 
     $("div#intro").fadeToggle('slow'); 
     $("div#container").fadeToggle('slow'); 
     $("div#mask").css("z-index", "-99"); 
    }); 
}); 

감사합니다 :

내가 지금 사용하고 스크립트입니다!

+0

쿠키 사용을 고려 했습니까? http://www.w3schools.com/js/js_cookies.asp – w00

답변

8

간단한 카운터를 사용해 볼 수 있습니다. 으로

// count how many times click event is triggered 
var eventsFired = 0; 
$(document).ready(function(){ 
    $("div#mask").click(function() { 
     if (eventsFired == 0) { 
      $("div#intro").fadeToggle('slow'); 
      $("div#container").fadeToggle('slow'); 
      $("div#mask").css("z-index", "-99"); 
      eventsFired++; // <-- now equals 1, won't fire again until reload 
     } 
    }); 
}); 

이 당신이 set a cookie 필요합니다을 지속. (예 : 해당 플러그인을 사용하는 경우 $.cookie()).

// example using $.cookie plugin 
var eventsFired = ($.cookie('eventsFired') != null) 
    ? $.cookie('eventsFired') 
    : 0; 

$(document).ready(function(){ 
    $("div#mask").click(function() { 
     if (eventsFired == 0) { 
      $("div#intro").fadeToggle('slow'); 
      $("div#container").fadeToggle('slow'); 
      $("div#mask").css("z-index", "-99"); 
      eventsFired++; // <-- now equals 1, won't fire again until reload 
      $.cookie('eventsFired', eventsFired); 
     } 
    }); 
}); 

나중에 쿠키를 삭제하려면 :

$.cookie('eventsFired', null); 
+0

이것은 페이지 새로 고침을 통해 작동하지 않을 것입니다 (OP가 원하는 것, 생각하지는 않지만 ...). –

+0

@FelixKling 당신 말이 맞습니다. 그래서 쿠키에 대해 조금 더했습니다. 나는 jQuery 플러그인 페이지에 링크하려고했으나 현재 다운되었다 : S. 어쨌든 고마워. –

+0

도와 주셔서 감사합니다. 쿠키 플러그인을 추천 해 주시겠습니까? –

1

웹 페이지가 페이지 새로 고침 사이에 상태를 유지하지 않는 점에서 이다. 페이지를 새로 고침하면 과거에 어떤 일이 일어 났는지 전혀 알 수 없습니다.

구조에 쿠키! 클라이언트의 브라우저에 변수를 저장하려면 use Javascript (및 더 쉽게하려면 jQuery has some nice plugins)을 사용할 수 있습니다. 마스크를 클릭하면 쿠키가 저장되므로 다음에 페이지가로드 될 때 쿠키가 표시되지 않습니다.

0

이 코드는 당신을 위해 완벽하게 작동하고 당신이 그것을 호출되고 나면 빈 함수를 한 번만

$(document).ready(function(){ 
     $("div#mask").one('click', function() { 
      $("div#intro").fadeToggle('slow'); 
      $("div#container").fadeToggle('slow'); 
      $("div#mask").css("z-index", "-99"); 
     }); 
    }); 
4

그냥 포인트를 실행하려는 이벤트를 바인딩 JQuery와 제공하는 표준 방법입니다.

var myFunc = function(){ 
    myFunc = function(){}; // kill it 
    console.log('Done once!'); // your stuff here 
}; 
+0

암시 적 상태를 닫아야 할 때 더 많은 행을 필요로하는 이름없는 함수를 사용하여이 작업을 시도했습니다. 이것이 가능한 한 간단하다고 생각하십시오. – Svend

관련 문제