2010-12-05 78 views
1

我有一個通過ajax加載的對話框。該Ajax的paylaod包含html和javascript。ajax加載內容失敗的jquery選擇器

該對話框顯示得很好,包含在該有效載荷中的JS執行。

但是,我無法從有效負載中的JS中選擇任何元素(無論是通過id,class還是元素類型)。

可以說有效載荷有:

<div> 
    <ul id="testid"> 
    <li>A</li> 
    <li>B</li> 
    </ul> 
</div> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     console.info('test: ' + $("#testid").length); 
    }); 
</script> 

這導致測試:0出現在控制檯中。

如果我改變選擇器在'body'上選擇,那麼它會產生一個非零值。

很明顯加載的內容正在顯示,它包含的JS正在執行,我的理解是.ready()調用應該允許更新DOM時間以包含html有效內容。

不幸的是,在這種情況下,我沒有直接控制ajax加載本身,因爲我使用了一個框架來爲我做對話框功能(zotonic)。其他ajax加載的頁面我有JS選擇ajax加載的有效載荷中的元素正在工作 - 它只是對話框的東西,(迄今)似乎失敗。

我有點失落,爲什麼只是這是錯誤的。我已經做了盡職調查,並在過去的幾天裏搜索了google等,但沒有解決方案,所以我想在這裏大聲呼救。

傑森

回答

0

我相信ready只能在第一次加載頁面。如果您取決於AJAX調用的結果,則需要使用回調,因爲該操作是異步的。 zotonic是否提供您可以使用的鉤子?否則它會變得更難一些。也許你可以查詢這樣的DOM,在頁面加載:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var interval = setInterval(function() {   
      if($("#testid").length > 0) { 
       clearInterval(interval); 
       console.info('test: ' + $("#testid").length); 
      } 
     }, 750); 
    }); 
</script> 

這將詢問他們每個頁面爲爲750ms #testid。如果它找到元素,則間隔將被取消,並且您應該獲得控制檯輸出。

+0

感謝您的計時器建議 - 肯定爲我工作..有沒有掛鉤,我知道zotonic讓我知道何時加載ajax對話框完成更新的DOM ..雖然我想我可能會建議它他們因爲做一個定時器(雖然有效:))對我來說似乎有點笨拙 – JAT 2010-12-05 23:06:49