2016-04-11 18 views
0

我正在嘗試使用javascript設置表td元素的寬度。當設置在函數之外時,寬度設置正確。當相同的代碼封裝在函數中時,td元素的寬度保持不變。我插入了斷點,它似乎代碼被解僱了。感謝您的幫助。在函數中設置td offSetWidth

這工作:

document.getElementById("myTD").offsetWidth = document.getElementById('<%= ID=myGridView.ClientID %>').rows[0].cells[0].offsetWidth; 

這不:

function myfunction() { document.getElementById("myTD").offsetWidth = document.getElementById('<%= ID=myGridView.ClientID %>').rows[0].cells[0].offsetWidth; }; 

該功能成功地從代碼中調用後面

protected void Page_Load(object sender, EventArgs e) 
    { 
     ScriptManager.RegisterStartupScript(this.Page, this.GetType(), 
       "myfunction", 
       "myfunction();", 
       true); 
    } 
+0

確保您在javascript中聲明myfunction時具有'function'這個詞。 'function myfunction(){// code}' – IrkenInvader

+0

好的捕獲我在我的實際代碼中有功能,但是我沒有在例子中包含它。謝謝。 – doctacular

+0

這似乎是一個範圍問題,我是否需要傳遞控件? – doctacular

回答

0

服務器調用所以,你有JavaScript的。最大的問題是腳本何時執行以及您的原始腳本何時執行?我的猜測是,您的舊腳本是在頁面加載後執行的,因此所有引用的元素都存在,並且所有元素都被瀏覽器繪製。

您的新腳本可能在內容完全加載之前運行,這意味着瀏覽器找不到引用的元素,因爲它尚未加載,或者沒有繪製任何內容,因此所有元素都沒有寬度。

+0

當頁面加載時,當函數外部運行時,您正確的代碼,因爲它存在於aspx標記中,即:。當從後面的代碼的Page_load事件中執行該函數時,我可以使用斷點看到GridView寬度具有正確的值,但td值保持不變。難道是gridview渲染,但表不是?我也可以看到tds的值,但它們沒有被更新。 – doctacular

0

我能夠得到它的工作,但TD元素比gridview元素稍寬。我相信這與填充有關:

function MyFunction(){ document.getElementById("myTd").width = document.getElementById('<%= ID=myGridview.ClientID %>').rows[0].cells[0].offsetWidth; };