2013-05-10 20 views
1

不知道如何制定這個,但在這裏。如果var沒有設置總是結果爲真,即使它設置爲

我正在檢查一個變量是否存在(內容),如果它沒有設置它。

問題是下一次點擊,它仍然表現得好像沒有var內容。但爲什麼??

這裏我的代碼:

$("#nav a").click(function(event) { 
    event.preventDefault(); 
    var href = $(this).attr("href"); 
    var load = href + " .content"; 
    if (!content) 
    { 
     var content = $('<div>').load(load); 
     $(".content").append(content); 

    } 
    else 
    { 
     var position = content.offset(); 
     $(document).scrollTop(position); 

    } 
}); 

它從來沒有結果一樣,所以總是一點擊是由整個負載和附加功能重複。

基本上我怎麼能記錄這個特定鏈接的內容已經加載一次,所以else函數應該在下次執行?

另外,我的if(!content)語句有什麼問題?是因爲範圍嗎?

回答

3

在Javascript函數中確定了一個對象的範圍。您需要將內容放入全局範圍。目前它是在分配給click事件處理程序的匿名函數中創建的,所以當函數再次執行時,內容超出了範圍,導致它返回false。

var content; 
$("#nav a").click(function(event) { 
    event.preventDefault(); 
    var href = $(this).attr("href"); 
    var load = href + " .content"; 
    if (!content) 
    { 
     content = $('<div>').load(load); 
     $(".content").append(content); 

    } 
    else 
    { 
     var position = content.offset(); 
     $(document).scrollTop(position); 

    } 
}); 
+0

好的,但在這種情況下,如果否則總是會導致其他權利? – user1721135 2013-05-10 16:34:42

+1

不,因爲我們還沒有分配內容,所以在''undefined' == false'中是undefined。瞭解更多有關真假和虛假的信息。 – 2013-05-10 16:36:17

2

嘗試使var content作爲一個全局變量,而不是當地的一個,就像你正在做的事情。這就是爲什麼if (!content)結果爲真總是一樣:

var content; 
$("#nav a").click(function (event) { 
    event.preventDefault(); 
    var href = $(this).attr("href"); 
    var load = href + " .content"; 
    if (!content) { 
     content = $('<div>').load(load); 
     $(".content").append(content); 
    } else { 
     $(document).scrollTop(content.offset()); 
    } 
}); 

只是爲了表明會發生什麼,當content值未設置在第一,然後重新設定:

var content; 
console.log(content); // undefined 
console.log(!content); // true 

content = 'text'; 
console.log(content); // text 
console.log(!content); // false 
0

感謝大家的回答關於檢查var是否存在的第一個問題。

我最終拋棄這個整體概念原來的

one() 

功能正是我需要的所有沿。爲了在所有下面的點擊中只執行一次函數和另一個函數。

這就是:

$(document).ready(function() { 
    //Ajaxify Navi 
     $("#nav a").one("click", function(event) { 
      event.preventDefault(); 
      var href = $(this).attr("href"); 
      var load = href + " .content"; 
      var content = $('<div>').load(load); 
      $(".content").append(content); 
      $(this).click(function(event) { 
       event.preventDefault(); 
       var position = content.offset().top; 
       $(document).scrollTop(position); 
       $("body").append(position); 
      }); 
     }); 
}); 

是什麼如下:

上通過AJAX一個按鈕加載內容第1點擊並添加到,同一個按鈕上第二僅限點擊滾動所述內容。

相關問題