套用MasterPage的話,網頁裡的元件的ClientID會被MasterPage惡搞,例如TextBox1變成 ctl00_ContentPlaceHolder1_TextBox1之類的。
原本想把義大利麵拿出來用,像這樣。
alert(document.getElementById('<% =TextBox1.ClientID%>').value);
不過基於程式潔癖在ASP上,把Control的ClientID當作參數傳入javascript function,用document.getElementById(blah)來找Control。
function testfunction(ctlName){
var ctl = document.getElementById(ctlName);
//blahblah code...
}
而ASP的code behind的Page_Load事件裡再去設定 OnClientClick(),或用Attributes.Add()來動態加入client side事件。Button1.OnClientClick = "testfunction('" + TextBox1.ClientID + "'); ";
//or
TextBox1.Attributes.Add("onblur", "testfunction('" + TextBox1.ClientID + "');");
可是這種作法,對javascript的寫作限制很大,有點蠢...Orz
不過今天撿到寶了 XD
查資料的時候無意間看到黑暗執行緒老大對這個問題的solution-
在Page_Load時動態產生一個尋找頁面control的function,用這個function來取代document.getElementById