2015-03-25 58 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] 
});