1. 程式人生 > >button的click事件觸發的提交問題

button的click事件觸發的提交問題

最近的專案中遇到一個問題,input(button)的onclick事件呼叫js方法之後,雖然在方法中寫了return false,卻依舊執行了onserverclick事件呼叫的後臺方法,然後換成Asp:Button,寫在OnClientClick事件中,也執行了OnClick事件。不僅是提交部分,在網路較慢的情況下,後臺btnSubmit_ServerClick事件會多次觸發,導致向資料庫插入了多條資料。

此處需注意的就是如下兩個按鈕中,inptut(button)的onclick方法和Asp:Button的OnClientClick方法等效,onserverclick方法和OnClick方法等效。

<input type="button" id="btnSubmit" runat="server" value="確定" onclick="CheckInfoAdd();" onserverclick="btnSubmit_ServerClick" />
<asp:Button ID="btnSubmit" runat="server" Text="確定" OnClick="btnSubmit_ServerClick" OnClientClick="CheckInfoAdd();" />
CheckInfoAdd()方法如下:
function CheckInfoAdd() {
            var txtCheckDate = $("#txtCheckDate").val();
            var txtCheckStatus = $("#ddlStatus").val();
            //var txtRemarks = $("#txtRemarks").val();
            if (txtCheckDate && txtCheckStatus) {
                __doPostBack("btnSubmit", "");
            }
            else {
                alert("時間和狀況不能為空!");
                return false;//<span style="color:#ff0000;">here to 阻止提交</span>
            }
        }
如上,在return false後依舊沒有停止提交,後來檢查想起來在什麼地方看到過需要在click事件中增加return,於是加上後,OK,解決了這個問題,後臺事件多次觸發的問題也解決了,但是卻不知道是什麼原理,所以大概查了下,詳細說明可見如下連結,這個算是說的比較詳細的。

這是修改後的程式碼:

<input type="button" id="btnSubmit" runat="server" value="確定" onclick="return CheckInfoAdd();" onserverclick="btnSubmit_ServerClick" />
<asp:Button ID="btnSubmit" runat="server" Text="確定" OnClick="btnSubmit_ServerClick" OnClientClick="return CheckInfoAdd();" />