2013-10-29 49 views
0

我想加載一個外部html文件,其中有一堆span標籤,它將計算我的主頁上特定類別列表中的內容數量,其餘的我的其他頁面,如 「遊戲(9),動畫(2)等。」 如此:jquery length()不依賴於ajax負載()

html要加載的內容通過ajax -

<span class="category games">(0)</span> 
    <span class-"category movies">(0)</span> 

主要的HTML代碼中插入數字和裝載Ajax內容 -

<div id="categories"> 
    <span class="counter cgames">(0)</span> 
    <span class="counter cmovies">(0)</span> 
</div> 

的JavaScript文件 -

$("#categories").load("bunchofspans.html"); 
    $(function() { 
     var a = $(".movies").length; 
      $(".cmovies").text("(" + a + ")"); 
      a = $(".games").length; 
      $(".cgames").text("(" + a + ")"); 
    }); 

很容易通過簡單地添加上的#categories一個隱藏的div特定種類的另一跨度號碼添加到計數器,因此可以說,我有6個號的第1頁遊戲的話,在第2頁我有另外6個,總共12個,這意味着我需要在我的網站的每個頁面中添加12個跨度的類別遊戲,這是耗時的,所以如果我通過ajax加載它,這些跨度將有一個地方在每一頁。

ajax內容加載完全正常,問題是,length()似乎不計算,無論我如何添加更多的跨度,數字不會反擊在櫃檯也不會增加。

+0

和你的長度代碼,在ajax的回調函數裏面.. – bipen

+0

爲什麼你的Javascript被註釋掉了? – Barmar

+0

任何依賴AJAX調用的結果_must_都必須在AJAX回調函數中完成,因爲AJAX是異步的。 – Barmar

回答

0

您需要提供回電如下加載

$("#categories").load("bunchofspans.html",function() { 
     var a = $(".movies").length; 
      $(".cmovies").text("(" + a + ")"); 
      a = $(".games").length; 
      $(".cgames").text("(" + a + ")"); 
}); 

有關更多信息,請參閱http://api.jquery.com/load/

0

修改您javascriptfunction()作爲回調打電話load()

$("#categories").load("bunchofspans.html" , function(){ 
    var a = $(".movies").length; 
    $(".cmovies").text("(" + a + ")"); 

    a = $(".games").length; 
    $(".cgames").text("(" + a + ")"); 
}); 

jQuery Documentation

+0

將現在嘗試它,先生,謝謝請等待我的回覆... – user2930790

+0

那麼,它工作? –

0

可以使用做到這一點Callback Function這樣的:

$("#categories").load("bunchofspans.html", function() { 
    alert("Load was performed."); 
    var a = $(".movies").length; 
    $(".cmovies").text("(" + a + ")"); 
    a = $(".games").length; 
    $(".cgames").text("(" + a + ")"); 
}); 
0

這裏的問題是,你的函數計數span的數量是執行天氣你的外部html內容被加載或沒有。那是因爲jQuery.load是異步。
jQuery.load documentation

這大致相當於$。獲得(網址,數據,成功)

因此,所有你需要的是你移動功能之後您的外部HTML內容將被執行已滿載

$("#categories").load("bunchofspans.html",function() { 
     var a = $(".movies").length; 
      $(".cmovies").text("(" + a + ")"); 
      a = $(".games").length; 
      $(".cgames").text("(" + a + ")"); 
});