为什么我不能在.load()回调函数中访问新加载的DOM元素?

时间:2011-02-24 16:28:32

标签: javascript jquery

我是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());
});  

为什么不呢?

3 个答案:

答案 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的参数。您需要提供helloload的引用:

 $('#playerslot').html( '' ).load('player/',hello);