2011-12-08 35 views
5

Tôi có 3 div (#Mask #Intro #Container) vì vậy nếu bạn nhấp vào Mặt nạ, Giới thiệu sẽ bị ẩn và Vùng chứa sẽ xuất hiện. Vấn đề là tôi chỉ muốn tải một lần duy nhất, không phải mỗi lần tôi làm mới trang hoặc bất cứ khi nào tôi nhấp vào menu hoặc liên kết, v.v.Gọi hàm chỉ khi

Làm cách nào để thực hiện việc này?

Đây là kịch bản tôi đang sử dụng cho bây giờ:

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

Cảm ơn bạn!

+0

Bạn đã cân nhắc sử dụng cookie chưa? http://www.w3schools.com/js/js_cookies.asp – w00

Trả lời

8

Bạn có thể thử sử dụng bộ đếm đơn giản.

// 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 
     } 
    }); 
}); 

Để tồn bạn này sẽ cần phải set a cookie. (ví dụ: $.cookie() nếu bạn sử dụng plugin đó).

// 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); 
     } 
    }); 
}); 

Để xóa cookie sau:

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

Điều này sẽ không hoạt động trên các lần làm mới trang (mà tôi nghĩ là những gì OP muốn, không chắc chắn ...). –

+0

@ FelixKling Bạn nói đúng, đó là lý do tôi thêm chút ít về cookie. Tôi _was_ sẽ liên kết đến trang plugin jQuery nhưng nó hiện đang xuống: S. Cảm ơn anyway mặc dù. –

+0

Cảm ơn tất cả vì sự giúp đỡ của bạn! Bạn có thể giới thiệu một số plugin cookie không? –

1

trang web là stateless ở chỗ chúng không giữ trạng thái giữa làm mới trang. Khi bạn tải lại trang, nó không có đầu mối gì đã xảy ra trong quá khứ.

Cookie để giải cứu! Bạn có thể use Javascript (và jQuery has some nice plugins để làm cho nó dễ dàng hơn) để lưu trữ các biến trên trình duyệt của khách hàng. Lưu trữ cookie khi mặt nạ được nhấp vào, để khi trang được tải tiếp theo, cookie sẽ không bao giờ hiển thị.

0

mã này với sẽ làm việc hoàn hảo cho bạn và nó là cách tiêu chuẩn được cung cấp bởi jquery để ràng buộc sự kiện mà bạn muốn thực hiện một lần duy nhất

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

Chỉ cần điểm để một chức năng có sản phẩm nào một khi nó đã được gọi.

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

Tôi đã cố gắng thực hiện điều này với một hàm chưa được đặt tên, điều này có nhiều dòng hơn khi bạn cần đóng trạng thái ngầm. Hãy suy nghĩ điều này là đơn giản như nó có thể nhận được. – Svend

Các vấn đề liên quan