OnClientClick是客戶端事件方法.通常採用JavaScript來進行處理.也就是直接在IE端運行.一點擊就運行.javascript
OnClick事件是服務器端事件處理方法,在服務器端,也就是IIS中運行.點擊按鈕後,執行postback,再運行.java
若是一個按鈕上咱們同時有客戶端的OnClientClick方法又有OnClick事件處理方法,如何才能按照正常的邏輯運行呢?c#
OnClientClick中咱們經常使用來作一些客戶端的檢測.固然放在服務器也能夠作一樣的檢測,但這樣作的代價是與服務器進行交互,消耗資源。服務器
例:函數
test()爲一javascript函數.post
<script type="text/javascript"> function test() { var value = document.getElementById("<%=t1.ClientID%>").value; if (value == "") { alert("不能爲空值"); return false; } } </script>
t1爲一文本框,判斷輸入內容是否爲空
spa
<asp:TextBox ID="t1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="return test()" onclick="Button1_Click" />
須要注意的是當咱們當擊這個按鈕時,自動先執行的客戶端,再執行服務器端的.若是客戶端返回的是false,那麼服務器端對應的方法永遠不會執行.這樣就達到檢測,只有經過纔去執行服務器端的方法.code
也就是說若是咱們上面寫成:orm
<asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="test();return false" onclick="Button1_Click" />
那麼無論test()執行的結果如何.服務器端對應的Button1_Click方法都永遠不會執行.由於return false使得始終使客戶端返回falseserver
若是咱們寫成:
<asp:Button ID="Button1" runat="server" Text="提交" OnClientClick="test()" onclick="Button1_Click" />
那麼Button1_Click都有會發生.一樣也就達不到效果.也就是說你沒有經過檢測也去執行服務器的方法了.
我們還能夠經過Button1.Attributes.Add("onclick", "test()");的方法來觸發客戶端事件