jQuery:在哪里放分号?

时间:2011-09-06 17:38:34

标签: javascript jquery

我主要通过研究其他人的代码来学习jQuery。

我找到了这个脚本http://net.tutsplus.com/tutorials/javascript-ajax/how-to-load-in-and-animate-content-with-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”启动函数“loadContent”,而用“showNewContent()”(带括号)启动函数“showNewContent”?

4 个答案:

答案 0 :(得分:3)

这是一个错误。该行应该是:

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

顺便说一句,您不需要传递第二个参数。请改用:

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

答案 1 :(得分: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');
              });
          });
     });
});

使用名称放置内联函数的示例可能会让您感到困惑。

答案 2 :(得分:0)

您需要在声明后添加分号。所以这个:

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

应该是

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

声明一个函数后你不需要它们,但如果它们不在那里就不会破坏它们。

对于showNewContent和showNewContent()之间的区别,前面将函数传递给load事件。后者将函数的结果(在这种情况下,showNewContent没有返回,因此它返回null)传递给load事件。如果您希望函数在加载时运行,那么您将使用showNewContent版本。

答案 3 :(得分:0)

问题来自无效语法,请参阅@Joseph的回答。您遇到的问题是您对如何使用函数的理解(第二个问题)。

JavaScript中的函数可以像任何其他值一样分配给变量。通过传递showNewContent(没有括号)你正在做的是你实际上传递一个变量。 load和fadeOut方法将查看您传递给它们并执行它的变量。这是JavaScript中的一个简单示例,我们将函数传递给另一个函数。

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

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

希望有所帮助。