2014-11-06 63 views
2

考慮下面的js代碼(點擊加載一個asp.net Button):爲什麼window.onload忽略回傳?

function doSomething() 
{ 
    document.getElementById("<%= theButton.ClientID %>").click(); 
} 
window.onload = doSomething; 

當頁面加載 - 執行按鈕的代碼隱藏,並在頁面加載再次(用新信息)。這應該已經引入了無限循環的錯誤,但它沒有。它只被調用一次,並在回發中被忽略。

爲什麼?

+0

頁面如何重新加載?這是什麼意思 – 2014-11-06 13:02:09

+0

爲什麼不使用JavaScript中的'_doPostBack()'方法? – LcSalazar 2014-11-06 13:08:05

+0

@EkanshRastogi這是一個asp.net的事情 - 當代碼隱藏被執行時 - 頁面得到[postback](http://en.wikipedia.org/wiki/Postback)。 – ispiro 2014-11-06 13:08:17

回答

0

假設你想被稱爲僅第一次加載頁面的doSomething方法:

您應該將呼叫doSomething添加到後面的代碼使用Page.RegisterStartupScript的頁面,但將它包裝在一個if語句檢查它是否是回傳。這樣,您的方法將只被稱爲第一次頁面加載:

if(!Page.IsPostBack) 
{ 
    Page.ClientScript.RegisterStartupScript(GetType(), "buttonClickScript" "window.onload = doSomething;", true); 
} 
+1

他問爲什麼沒有無限循環而不是如何修復它。 – Stilgar 2014-11-06 15:44:42

+0

我是基於OP的評論:「我想知道如果我可以依靠這不創建一個無限循環」。這樣做,你不需要依靠它不會創建一個無限循環。我會想象所描述的行爲是因爲OPs腳本在asp.net生成的_postback腳本加載並附加到按鈕之前執行。我不會依賴它,我會控制服務器端代碼的頁面流。 – Keith 2014-11-06 15:57:59