Javascript 为什么可以';在.load()回调函数中访问新加载的DOM元素吗?
我对JavaScript和jQuery非常陌生,所以我想我对这些东西应该如何工作有些误解。我所做的是通过.load()加载一些html,然后调用以前定义的函数作为回调函数。此函数与我直接就地定义时所做的不同:Javascript 为什么可以';在.load()回调函数中访问新加载的DOM元素吗?,javascript,jquery,Javascript,Jquery,我对JavaScript和jQuery非常陌生,所以我想我对这些东西应该如何工作有些误解。我所做的是通过.load()加载一些html,然后调用以前定义的函数作为回调函数。此函数与我直接就地定义时所做的不同: $(document).ready(function(){ $('#playerslot').html( '' ).load('player/',function(){ $('#new_element').replaceWith('Hello World!') })
$(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());
});
为什么不呢?试试这个(注意,hello
后面没有括号):
每当您将一个函数传递给另一个稍后调用的函数(这称为回调)时,都会忽略括号,因为您不希望现在调用该函数,而是希望另一个函数稍后调用它。可以将其视为一种提供稍后调用的函数名称的方法。hello()
立即调用该函数,并将其返回值(未定义
)作为加载
的参数。您需要提供对hello
到load
的引用:
$('#playerslot').html( '' ).load('player/',hello);
当您将回调定义为
hello()
时,实际上此时正在调用该函数,结果就是分配给回调的内容。相反,你应该这样做
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', hello);
});
或者(如果需要将参数传递给回调中调用的函数,这是必需的),您可以将函数包装到匿名函数中:
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', function() {hello()});
});
$(document).ready(function(){
$('#playerslot').html( '' ).load('player/', function() {hello()});
});