2011-09-06 38 views
0

我主要通過學習其他人的代碼來學習jQuery。我發現這個腳本http://net.tutsplus.com/tutorials/javascript-ajax/how-to-load-in-and-animate-content-with-jquery/jQuery:在哪裏放分號?

我已經改變了一點,所以我得到這個代碼:

$(document).ready(function() { 
    $('nav li a').click(function() { 

     var toLoad = $(this).attr('href')+' article'; 
      $('article').fadeOut('slow',loadContent); 

     function loadContent() { 
      $('article').load(toLoad,'',showNewContent()) 
     } 

     function showNewContent() { 
      $('article').fadeIn('slow'); 
     } 

     return false; 
    }); 
}); 

現在很多的問題後,我發現整個事情不工作,當我把一個分號後「showNewContent())」。爲什麼會發生?我的第二個問題是,爲什麼他只用「loadContent」而不是函數「showNewContent」和「showNewContent()」(用括號)啓動函數「loadContent」?

+0

分號是換行符。你爲每個分號執行一個命令。我猜jQuery在這方面有點混亂,因爲你可以把事情鏈接在一起。 – Chamilyan

+0

我是寫這個問題的人。首先感謝所有想要幫助的人。我想我的問題是我的瀏覽器緩存,這似乎需要刪除。再次感謝! – Mausoleum

回答

3

這是一個錯誤。該行應該是:

$('article').load(toLoad, '', showNewContent); 

順便說一下,您不需要傳遞第二個參數。代之以:

$('article').load(toLoad, showNewContent); 
+0

啊,謝謝你。順便問一下,你知道那是什麼嗎? – Fart

+0

@Fart:看看http://api.jquery.com/load/。基本上,有3個參數可以傳遞給'.load':URL,數據和回調。由於他沒有數據要發送,所以他傳遞了一個空字符串。但是,如上所述,這不是必需的。如果你看看jQuery文檔,你會發現這些參數是可選的,可以簡單地省略。 –

0

你會想要在語句後加一個分號。所以這個:

$('article').load(toLoad,'',showNewContent()) 

應該

$('article').load(toLoad,'',showNewContent()); 

你並不需要他們宣告一個功能之後,但如果他們不在那裏它不會破壞任何東西。

至於showNewContent和showNewContent()之間的差,較早傳遞函數對負載事件。後者將函數的結果傳遞給load事件(在這種情況下showNewContent不返回,因此它返回null)。如果你想讓你的函數在加載時運行,那麼你將使用showNewContent版本。

3

回答您的問題:

1)在該行

$('article').load(toLoad,'',showNewContent()) 

末的分號應該對代碼渲染沒有影響。當你說它不起作用時,你是什麼意思?

2)兩個調用之間的區別是他提供一個函數作爲被調用的委託,而另一個實際執行該函數並將其返回給調用者。該代碼似乎是錯誤的;該參數應該是一個回調來執行,而不是一個值本身。

// This is a reference to the method. IE, this would be valid code: 
var someMethod = loadContent; 
someMethod(); 

var someResult = showNewContent(); 
// someResult in this case is 'undefined', not a reference to a function. 

上面的代碼可以重寫,像這樣:

$(document).ready(function() 
{ 
    $('nav li a').click(function() 
    { 
      var toLoad = $(this).attr('href') + ' article'; 

      $('article').fadeOut('slow', function() 
      { 
       $('article').load(toLoad, '', function() 
       { 
        $('article').fadeIn('slow'); 
       }); 
      }); 
    }); 
}); 

你將內聯函數名,實例可能會混亂的問題給你。

0

問題來自無效語法看到@約瑟夫的答案。您遇到的問題是與你如何使用功能的瞭解(你的第二個問題)。

在JavaScript的函數可以被分配給一個變量,就像任何其他值。通過傳遞showNewContent(不括括號),你實際上是在傳遞一個變量。 load和fadeOut方法將查看您傳遞給它們並執行它的變量。下面是JavaScript中的一個簡單例子,我們將一個函數傳遞給另一個函數。

var myFuncToPass = function() { alert('hi'); }; 
doStuff(myFuncToPass); 

function doStuff(func) 
{ 
    func(); // will do an alert 
} 

希望有所幫助。