2015-11-04 59 views
1

在我的asp.net應用程序,我想調用一個函數Javascript,通過執行以下操作:Asp.net的RegisterStartupScript不點火

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", "function goToDiv(){window.location.hash = '#ctl00_body_ApplicationFormContainer'};", true);   

但不點火。

JavaScript函數被調用回發事件後,但我認爲它應該還是火,因爲我下面的代碼添加到我的Page_Load

if (IsPostBack) 
    { 
     Response.Write("POSTBACK:" + DateTime.Now.ToString("hh.mm.ss.ffffff"));    
    } 

,改變了startupscript到:

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", "alert('POSTBACK: "+DateTime.Now.ToString("hh.mm.ss.ffffff")+"')", true);   

JavaScript警報時間是在回發時間之後,告訴我JavaScript警報是在回發後觸發的?

然後我改變了代碼回來,走到控制檯源選項卡,啓動腳本已經運行之前,並進入:

goToDiv() 

這給了以下錯誤:

Uncaught ReferenceError: goToDiv is not defined(…) 

例如該功能不存在。

然後我在啓動腳本事件後再次輸入它,並且它運行,所以我知道該函數已創建 - 那爲什麼它不運行?

我的代碼似乎在語法上是正確的,所以我看不出是什麼問題?

回答

3

您的代碼: -

Page.ClientScript.RegisterStartupScript(this.GetType(), "goToDiv", 
    "function goToDiv(){window.location.hash = '#ctl00_body_ApplicationFormContainer'};", 
    true); 

是簡單地增加一個Javascript功能,但不執行它。你需要觸發這個功能嗎?

只需添加一個按鈕來測試: -

<input type="button" onclick="goToDiv()" value="Foo" /> 

當你點擊這個按鈕,它就會執行這個JavaScript函數。

如果你的意圖是要執行一些塊,那麼你爲什麼要創建一個函數?你可以執行Javascript語句本身。

and the JavaScript alert time was after the postback time, telling me the JavaScript alert is fired after the postback?

是很明顯,您註冊在服務器端的Javascript代碼,所以當該頁面在瀏覽器(客戶端)只有你的JS代碼會被執行呈現。