ASP.NET的OnClientClick與OnClick事件

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()");的方法來觸發客戶端事件

相關文章
相關標籤/搜索