我是JavaScript和jQuery的新手,所以我觉得我对这些东西应该如何运作有一些误解。我做的是通过.load()加载一些html,然后我调用以前定义的函数作为回调函数。此功能与我直接定义它时的功能不同:
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/',function(){
$('#new_element').replaceWith('Hello World!')
});
});
上面的代码有效,而这个代码没有:
function hello(){
$('#new_element').replaceWith('Hello World!')
});
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/',hello());
});
为什么不呢?
答案 0 :(得分:3)
当您将回调定义为hello()
时,实际上正在调用该函数,结果是指定为回调的内容。相反,你应该做
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', hello);
});
或(如果您需要将参数传递给回调中调用的函数,这是必要的)您可以将函数包装在匿名函数中:
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', function() {hello()});
});
答案 1 :(得分:2)
试试这个(hello
后注意没有括号):
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', hello);
});
每当你将一个函数传递给另一个稍后要调用的函数时(这被称为回调),你省略了括号,因为你不想现在调用这个函数,你想要另一个函数稍后调用它。可以把它想象成为稍后调用函数的名称的方法。
答案 2 :(得分:1)
hello()
立即调用该函数并提供返回值(undefined
)作为load
的参数。您需要提供hello
至load
的引用:
$('#playerslot').html( '' ).load('player/',hello);