button的click事件觸發的提交問題
阿新 • • 發佈:2019-01-22
最近的專案中遇到一個問題,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()方法如下:
如上,在return false後依舊沒有停止提交,後來檢查想起來在什麼地方看到過需要在click事件中增加return,於是加上後,OK,解決了這個問題,後臺事件多次觸發的問題也解決了,但是卻不知道是什麼原理,所以大概查了下,詳細說明可見如下連結,這個算是說的比較詳細的。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> } }
這是修改後的程式碼:
<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();" />