HTML事件的控制元件觸發 (轉)

worldblog發表於2007-08-16
HTML事件的控制元件觸發 (轉)[@more@]

一個朋友問了我一個問題,頗有意思
問題是這樣的,一個頁面上有一個的Button,為什麼在Page_Load里加上了
Button1.Attributes["onclick"]="script:return window.confirm('請確定輸入無誤?');";
卻彈不出確認對話方塊。
因為是在上交流的,我給他測試了一下,語句沒有一點問題,還以為是 出了問題。不過一想這主要是用,問題不應該出在framework上。
Button伺服器控制元件傳送到客戶端後的html標記為

上面那條語句的原理也就是傳送到客戶端後在input標記中加入
onclick="javascript:return window.confirm('請確定輸入無誤?');"
以彈出確認對話方塊
我讓他透過“檢視源”,得到了傳送到客戶端的button標記

發現其中有兩個onclick事件,仔細一問把原因搞清楚了
他在頁面上還有一個RequiredFieldValidator,而RequiredFieldValidator的原理也是給所有CausesValidation="True"的Button加上
onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); "
因此,出現了兩個onclick,IE只響應了第一個onclick。如果把Button設為CausesValidation="False",確認對話方塊就可以彈出來了。
現在問題變成了在一個帶有RequiredFieldValidator的頁面上,怎麼讓CausesValidation="True"的按鈕彈出確認對話方塊
我做了第一次嘗試,在一個新的頁面,用下面的語句測試
Button2.Attributes["onclick"]="alert('Sure!');";
Button2.Attributes["onclick"]+="javascript:return window.confirm('請確定輸入無誤?');";
傳送到客戶端後為

也就是兩個onclick語句合到了一起,正常顯示
但是,我想用相應的方法時加到Button1時
Button1.Attributes["onclick"]+="javascript:return window.confirm('請確定輸入無誤?');";
很遺憾,還是出現兩個onclick,這麼做還是不行。我想這可能是RequiredFieldValidator的特殊機制吧。
又仔細看了一下RequiredFieldValidator控制元件的原理,在一個含有RequiredFieldValidator控制元件的頁面上,RequiredFieldValidator控制元件傳送到客戶端後生成一些javascript,CausesValidation="True"的Button只比CausesValidation="False"的Button多了一句onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); ",即相應的javacript程式碼在客戶端驗證,明白了這點
我又做了如下修改
把Button1設CausesValidation="False",在Page_Load裡
Button1.Attributes["onclick"]="javascript:if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();return window.confirm('請確定輸入無誤?');";
這一次成功了,既彈出了確認對話方塊,也進行了RequiredFieldValidator的驗證
不過這樣的話每次都要彈出確認對話方塊,我想進一步改進,讓它先進行RequiredFieldValidator的驗證,如果透過,再彈出對話方塊,又稍稍做了如下修改
Button1.Attributes["onclick"]="javascript:if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();if(Page_ClientValidate()) return window.confirm('請確定輸入無誤?');";

各位兄弟可以試試,看看還有什麼更好的辦法:)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-961192/,如需轉載,請註明出處,否則將追究法律責任。

相關文章