Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';在.load()回调函数中访问新加载的DOM元素吗?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么可以';在.load()回调函数中访问新加载的DOM元素吗?

Javascript 为什么可以';在.load()回调函数中访问新加载的DOM元素吗?,javascript,jquery,Javascript,Jquery,我对JavaScript和jQuery非常陌生,所以我想我对这些东西应该如何工作有些误解。我所做的是通过.load()加载一些html,然后调用以前定义的函数作为回调函数。此函数与我直接就地定义时所做的不同: $(document).ready(function(){ $('#playerslot').html( '' ).load('player/',function(){ $('#new_element').replaceWith('Hello World!') })

我对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());
});  
为什么不呢?

试试这个(注意,
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()});
});