我主要通过研究其他人的代码来学习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”?
答案 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
}
希望有所帮助。