2011-05-19 25 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