jquery回调函数范围

时间:2010-07-01 12:05:15

标签: javascript jquery scope callback

当我使用jquery在回调函数中创建一个元素(例如div)时,它不允许我在回调函数之外操作新创建的元素,我该如何解决这个问题呢?

这是一个例子:

$.get('menu.xml',function(data){

//create a new element with an ID called "#newElement"

})

//I can't select the element outside the callback function so the following code dosen't work:

$('#newElement').css('background','black'); 

3 个答案:

答案 0 :(得分:3)

可以在外面选择它,但尚未$.get()回调需要一些时间才能运行(它必须从服务器获取数据,回调发生以后,当完成时),所以当你这样做时:

$('#newElement').css('background','black');

该元素不存在尚未(因此选择器找不到任何东西......它在之前运行回调创建它),你需要等到回调完成后再继续任何需要它创建的元素的代码。像这样:

$.get('menu.xml',function(data){
  //create a new element with an ID called "#newElement"
  //kick off stuff that uses "#newElement"
  $('#newElement').css('background','black'); 
});

答案 1 :(得分:1)

$.get('menu.xml',function(data){
     //create a new element with an ID called ".newElement"

     $('<div/>').val(data).attr('id','newElement').css('background','black').append('#container');

})

尝试修改回调中的元素,也尝试使用类而不是id

答案 2 :(得分:1)

从您显示的代码判断,似乎您试图在它存在之前操纵'#newElement'。原因是'#newElement'是在'$ .get'的回调中创建的。

重要的是要记住javascript中的异步函数不会导致线程等待,这就是回调存在的原因。因此,在执行'$ .get'的回调函数之前,您正试图操纵'#newElement'。

例如,如果您将代码调整为:

$.get('menu.xml',function(data){

    //create a new element with an ID called "#newElement"
    ....

    $('#newElement').css('background','black');
})

你会发现它有效。