2010-05-12 56 views
0

我在一個單獨的.js腳本文件中實現了下面的函數,該文件加載在我的主頁面(Asp.net mvc)中。jQuery - .Ready在div頁面中不在頁面中觸發

回撥給服務器的費用相當高,但如果在需要填寫我的div標籤的子頁面/內容頁面上特別要求,請確定。

我的問題是代碼在每個頁面上運行,包括div標籤不存在的頁面。

我該如何補救我的代碼?

任何意見歡迎, 謝謝,安德斯,丹麥

jQuery("divStatWrapper").ready(function() 
    { 
    jQuery.getJSON("/Statistics/GetPointsDevelopment", 
     function(json) 
     { 
      jQuery("#divStatWrapper #divStatLoading").fadeOut(1000); 

      var jsonPoints = new Array(); 

      jQuery.each(json.Points, function(i, item) 
      { 
       jsonPoints.push(item.PlayerPoints); 
      }); 

      jsonPoints.reverse(); 

      var api = new jGCharts.Api(); 
      jQuery('<img>') 
      .attr('src', api.make({ 
       data : jsonPoints, 
       type : "lc", 
       size : "600x250" 
       })) 
      .appendTo("#divStatContents"); 

      jQuery("#divStatWrapper #divStatContents").fadeIn(1000); 

     }); 
    }); 

HTML:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

    <%@ Import Namespace="AJF.Op.Web.MVC.SpilMerePool.Helpers" %> 
    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
     <center> 
      <table id="statisticsTable" classname="statisticsTable"> 
       <tr valign="top" align="center"> 
        <td> 
         <%Html.RenderPartial(SMPControls.QueueStatus.ToString(), null); %> 
        </td> 
        <td> 
         <h2> 
          Statistik - udvikling i point over tid</h2> 
         <h3> 
          (Alle resultater frem til løbende dato)</h3> 
         <div id="divStatWrapper"> 
          <div id="divStatLoading"> 
           <img src="../../Images/ajax-loader.gif" /> 
           <span>Loading</span> 
          </div> 
          <div id="divStatContents"> 
          </div> 
         </div> 
        </td> 
       </tr> 
      </table> 
     </center> 
    </asp:Content> 
+0

爲什麼不'$(文件)。就緒(...)'運行一次? – Reigel 2010-05-12 07:08:02

+0

我讀過$可能會被用於不同的目的,這取決於你正在使用的庫 - 所以爲了安全起見,我只是寫出來。據我所知,$和jQuery是一樣的(除非被其他庫重載)。 – 2010-05-12 08:20:48

回答

1

只是一個想法:

$("#divStatContents").each(function(){ 
    // your code here 
}); 

將爲每個#divStatContents

+0

我結束了一個組合 - .each包裝在.ready中,謝謝大家! – 2010-05-17 07:41:28

1

是否缺少#?

jQuery("#divStatWrapper").ready(function() [...] 
     ___ 

除此之外,ready函數在DOM準備好時觸發,而不是在元素被加載時觸發。從文檔:

只能在匹配當前文檔的jQuery對象上調用.ready()方法,因此可以省略選擇器。

你或許應該綁定到div,而不是現成事件的Load事件:

jQuery('#divStatWrapper').load(function() [...] 
+0

嗨,一月, 我試圖添加#但現在它根本不運行?!我也改爲.load(我一直在複製錯誤的地方;-)),但也沒有讓它運行。任何線索? – 2010-05-12 08:19:03

+0

也許你應該把整個東西包裝在一個jQuery(document).ready()調用中,以確保DOM被加載。你也可以嘗試「每個」而不是「加載」,因爲它只會觸發一次。 – 2010-05-12 08:32:37

0

它可能是因爲您最初的選擇是錯誤的。我假設你沒有在你的HTML,這意味着你要引用<div>與ID,像這樣(注意#)任何<divStatWrapper>元素:

jQuery("#divStatWrapper") 
0
//declare event to run when div is visible 
function doFunction(){ 
    //do something 

} 

//hookup the event 
$('#divId').bind('isVisible', doFunction); 

//show div and trigger custom event in callback when div is visible 
$('#divId').show('slow', function(){ 
    $(this).trigger('isVisible'); 
}); 
相關問題