2011-12-08 7 views
5

3つのdiv(#Mask #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

Webページがステートレスです。ページをリロードすると、過去に何が起こったのか分かりません。

レスキュークッキー!変数をクライアントのブラウザに格納するには、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

関連する問題