HTML事件的控制元件觸發 (轉)
一個朋友問了我一個問題,頗有意思
問題是這樣的,一個頁面上有一個的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTML5觸控事件(touchstart、touchmove和touchend) (轉)HTML事件
- 有趣的觸發器事件觸發器事件
- 取消事件觸發事件
- 手機端html5觸屏事件(touch事件)HTML事件
- WebSocket的事件觸發機制Web事件
- Android觸控事件(下)——事件的分發Android事件
- touch事件和click事件多次觸發的問題事件
- 一段實現HTML頁面內定期觸發事件的JavaScript程式碼HTML事件JavaScript
- 使用 jQuery 觸發 Vue 事件jQueryVue事件
- 取消事件觸發(妙啊)事件
- jQuery select 觸發事件jQuery事件
- JavaScript 模擬事件觸發JavaScript事件
- oracle 觸發器 client 事件Oracle觸發器client事件
- HTML5實戰與剖析之觸控事件(touchstart、touchmove和touchend)(轉)HTML事件
- WPF 在改寫ItemTemplate、 DataTemplate中,控制元件命令事件觸發不起作用控制元件事件
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 通過程式碼控制View的觸控事件被觸發View事件
- [翻譯]整合滑鼠、觸控 和觸控筆事件的Html5 Pointer Event Api事件HTMLAPI
- asp.net中的html控制元件點選事件與伺服器控制元件點選事件的不同ASP.NETHTML控制元件事件伺服器
- javascript如何獲取觸發事件的物件JavaScript事件物件
- js 建立和觸發事件 和 自定義事件JS事件
- 如何觸發react input change事件React事件
- Yii中事件觸發機制事件
- mvvm模式 事件觸發器[wpf]MVVM模式事件觸發器
- Vue事件獲取觸發事件物件和繫結事件物件Vue事件物件
- 原生javascript如何獲取觸發事件的物件JavaScript事件物件
- storage事件中的坑,storage.setItem()無法觸發storage事件事件
- javascript避免dom事件重複觸發JavaScript事件
- js頁面載入觸發事件JS事件
- view.performClick()觸發點選事件ViewORM事件
- (interbase之九)intebase的儲存過程、觸發器以及事件、異常 (轉)儲存過程觸發器事件
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- 觸控事件事件
- 【PB】如何觸發帶引數的自定義事件?事件
- 【透鏡系列】看穿 > 觸控事件分發 >事件
- withoutEvents函式裡面的事件被觸發函式事件
- 第77天:jQuery事件繫結觸發jQuery事件
- js程式碼觸發事件 函式列表JS事件函式