2011-05-19 48 views
1

我是相當新的JavaScript/jquery/ajax,所以我懷疑這個問題是我沒有看到一些錯字。它工作正常,但在編輯過程中,hide()+ show()方法停止工作(在Firefox + Chrome中測試它)。我已經多次讚揚它,看不出有什麼問題。jquery + AJAX停止工作 - 你能發現問題嗎?

的script.js

$(document).ready(function(){ 

    $('p').click(function() { 
     $(this).hide(); 
    }) 

    $('#nav li a').click(function(){ 
     var toLoad = $(this).attr('href')+' #content'; 

     $('#content').hide('fast',loadContent); 

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

     function showNewContent() { 
       $('#content').show('normal'); 
     } 
     return false; 
    }); 
}); 

在我的index.html頁面下面的腳本包含在該節:

<script src="script.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 

任何提示非常感謝。 -David

回答

4

您需要在之前包含jQuery 您的script.js

JavaScript代碼被同步執行。在你的例子中,$是(或至少應該是)undefined,當然undefined沒有類似jQuery的方法。

此外,您的回調之一定義爲showNewContent()。最後的括號將調用該函數並將其結果作爲回調傳遞回來,這在此情況下不是您想要的。

相反,請刪除()以僅傳遞該函數的引用。

+0

我想你的意思是,他應該寫他的2個回調(showNewContent和loadContent)作爲函數的引用var loadContent = function(){...} – ehudokai 2011-05-19 00:17:46

+0

@ehudokai不一定,只是名稱應該這樣做,並且OP可以將它們留作聲明。 – alex 2011-05-19 00:23:47

+0

好吧,我明白你現在在說什麼... – ehudokai 2011-05-19 00:25:59

0

您的index.html東西更改爲

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 
<script src="script.js"></script> 

和你的代碼中的script.js到:

$(document).ready(function(){ 

    $('p').click(function() { 
    $(this).hide(); 
    }) 

    $('#nav li a').click(function(){ 
    var toLoad, loadContent, showNewContent; //keep the variable scope local 
    toLoad = $(this).attr('href')+' #content'; 


    $('#content').hide('fast',loadContent); 

    loadContent = function() { 
     $('#content').load(toLoad,'',showNewContent) 
    } 

    showNewContent = function() { 
      $('#content').show('normal'); 
    } 
    return false; 
    }); 
}); 
+0

感謝您的幫助,它現在完美的工作!我對你添加的行的含義有一個跟進問題:var toLoad,loadContent,showNewContent。此行是否意味着toLoad對於函數loadContent和showNewContent是本地的。這不是你用來聲明三個未初始化變量的語法,它們的名字是toLoad,loadContent和showNewContent嗎? – dmoench 2011-05-19 02:22:28

+0

@dmoench是的,該行只是簡單地初始化3個變量,使用var將它們保持在您的點擊回調函數的本地範圍內。最佳做法是一次初始化所有變量。 – ehudokai 2011-05-19 17:12:06