2015-03-25 60 views
0

我有以下功能getItemID,它会查找某个父母ID为(#search-output)下的所有ID。如果在页面加载时加载ID (#test)getItemID将找到没有问题的ID。.map查找通过AJAX加载过的元素

但是,我实际上是通过AJAX构建这些ID的(#test),所以我的功能getItemID需要能够找到通过AJAX加载的这些ID的(#test)

我认为这里的问题是.map(function(){})里面getItemID在页面加载后找不到添加到DOM的元素。无论何时加载,我都需要一种方法来寻找所有元素。

这工作:HTML:

<div id="search-output"> 
    <div id="test"></div> 
</div> 

这不起作用:HTML:

<div id="search-output"> 
</div> 

的JavaScript getItemID功能:

function getItemID(){ 
    var ID = $('#search-output [id]').map(function(){ 
     return this.id; 
    }).get(); 

    if(ID.length == 0){ 
     return null; 
    }else{ 
     return ID; 
    } 
} 

JavaScript的AJAX返回HTML:

$.ajax({ 
    url:'lib/search-server.php', 
    type:'POST', 
    data: { 
     search: "*" 
    }, 
    dataType:'json', 
    success: function(data){ 
     /* data[0] contains "<div id="test"></div>" */ 
     $('#search-output').append(data[0]); 
    } 
}); 
+2

需要调用Ajax调用后的功能要那样做......如果完成了AJAX调用之前有在'搜索output'所以没有任何元素,则执行'getItemID'方法返回 – 2015-03-25 04:13:30

+0

@ArunPJohny,哦,哇,这是一个菜鸟的错误!谢谢!我应该关闭还是你想把它作为答案? – Joseph 2015-03-25 04:15:10

回答

1

这里的一个可能的问题是,你在呼唤getItemID完成AJAX请求之前,现在search-output没有任何孩子,使该方法将找不到任何元素ID返回。

所以解决方法是在ajax调用完成并更新dom之后调用getItemID方法。

$.ajax({ 
    url: 'lib/search-server.php', 
    type: 'POST', 
    data: { 
     search: "*" 
    }, 
    dataType: 'json', 
    success: function (data) { 
     /* data[0] contains "<div id="test"></div>" */ 
     $('#search-output').append(data[0]); 

     //now call the method 
     var ID = getItemID(); 
     //do other stuff 
    } 
}); 
1

尝试利用deferred.done(doneCallbacks [, doneCallbacks ])

的函数,或功能阵列中,当递延 解决被调用。

$.ajax({ 
    url:'lib/search-server.php', 
    type:'POST', 
    data: { 
     search: "*" 
    }, 
    dataType:'json' 
    }) 
    .done([function(data){ 
     /* data[0] contains <div id="test"></div> */ 
     $('#search-output').append(data[0]); 
    }, getItemID] 
});