2011-10-03 13 views
5
var r = { 
     init : function(){ 
      r = Raphael("pie"); 
      //r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif"; 
      r.g.text(320, -330, "Message Status").attr({ "font-size": 20 }); 

      var pie = r.g.piechart(360, -180, 100, <%= Session["uStats"] %>, { legend: [<%= Session["vkeyColor"] %>], colors: [<%= Session["vPieColor"] %>] }); 
      pie.hover(function() { 
       this.sector.stop(); 
       this.sector.scale(1.1, 1.1, this.cx, this.cy); 
       if (this.label) { 
        this.label[0].stop(); 
        this.label[0].scale(1.5); 
        this.label[1].attr({ "font-weight": 800 }); 
       } 
      }, function() { 
       this.sector.animate({ scale: [1, 1, this.cx, this.cy] }, 500, "bounce"); 
       if (this.label) { 
        this.label[0].animate({ scale: 1 }, 500, "bounce"); 
        this.label[1].attr({ "font-weight": 400 }); 
       } 
      }); 
      var r = Raphael("pie"), 

        data2 = [<%= Session["vProgressPercentage"] %>]; 
        axisx = ["10%", "20%"]; 
      r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif"; 
      r.g.barchart(80, 25, 100, 320, data2, { stacked: true, colors: [<%= Session["vProgressColor"] %>,'#fff'] }); 
      axis2 = r.g.axis(94, 325, 280, 0, 100, 10, 1); 
     } 
     } 
      window.onload = function() { 
      r.init(); 
     }; 

ページが読み込まれたときにJavaScriptが実行され、更新パネルを使用して部分的にポストバックが行われ、サーバー側からポストバックする方法でJavaScriptが実行されません。ポストバック時にサーバー側からjavascriptを呼び出す

<asp:ScriptManager ID="smCharts" runat="server" /> 
    <script type="text/javascript" language="javascript"> 
      Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
      function BeginRequestHandler(sender, args) { 
       r.init(); 
      } 
      function EndRequestHandler(sender, args) { 
       r.init(); 
      } 

      </script> 
     <asp:UpdatePanel runat="server" ID="Holder" OnLoad="messsagePercentStats" UpdateMode="Conditional"> 
      <ContentTemplate> 

       <div id="pie" onclick="__doPostBack('Holder', '');" style="top: -125px; left: -20px; width: 610px; position: relative; 
        height: 389px;"> 
       </div> 

これは私が試しているものであり、グラフは変更されていません。それはページがすでにロードされた後

protected void Timer_Tick(object sender, EventArgs args) 
    { 
     String MsgID = HttpContext.Current.Request.QueryString["MsgID"]; 
     int msgID = Convert.ToInt32(MsgID); 
     BindGridViewUsers(msgID); 

     ClientScript.RegisterStartupScript(this.GetType(), "loadpie", "r.init();"); 
     Holder.Update(); 
     } 

答えて

5

ScriptManager.RegisterStartupScriptを使用して、更新パネルからJavaScript関数を呼び出します。このような何か:

ScriptManager.RegisterStartupScript(this,this.GetType(),"key","javscriptfunction();" , false); 
0

window.onloadが動作しないページのロードのように一定のまま。代わりに

$(function(){ r.init();})

を使用してください。

2

あなたが関数内でこのスクリプトを置くことができます:

function foo() { 
    ... 
} 

DOMのロード時に実行されます。

window.onload = function() { 
    foo(); 
}; 

とのUpdatePanelを使用してサーバ側のポストバック時に:

ScriptManager.RegisterStartupScript(this, this.GetType(), "foo", "foo();", true); 
+0

私はコードを更新しました。あなたが間違っている場所を教えてください – Mark

0

あなたはまた、

Response.Write("<script language='javascript'>alert('I'm an alert');</script>"); 

を行うことができちょうど代わりalertの中にあなたのコードを置きます。そこから関数を呼び出すことができるかもしれませんが、私はそれをテストしていません。