Asp.net

如何在 ASP.NET 應用程序中使用 jQuery 擷取送出事件?

  • August 5, 2009

我正在嘗試使用 jQuery 處理元素的submit事件。form

   $("form").bind("submit", function() {
       alert("You are submitting!");
   });

這在表單送出時永遠不會觸發(作為回發的一部分,例如當我點擊按鈕或連結按鈕時)。

有沒有辦法使這項工作?我可以附加到觸發送出的單個元素的事件,但這不太理想 - 有太多的可能性(例如帶有 autopostback=true 的下拉列表、鍵盤快捷鍵等)


**更新:**這是一個最小的測試案例 - 這是我的 aspx 頁面的全部內容:

<%@ page language="vb" autoeventwireup="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   <title></title>
</head>
<body>
   <form id="form1" runat="server">
       <div>
           <asp:scriptmanager id="ScriptManager" runat="server" enablepartialrendering="true">
               <scripts>
                   <asp:scriptreference path="/Standard/Core/Javascript/Jquery.min.js" />
               </scripts>
           </asp:scriptmanager>
           <p>
               <asp:linkbutton id="TestButton" text="Click me!" runat="server" /></p>
       </div>
   </form>

   <script type="text/javascript">
       $(document).ready(function() {
           alert("Document ready.");
           $("form").submit(function() {
               alert("Submit detected.");
           });
       });
   </script>

</body>
</html>

點擊連結按鈕時,我收到“文件準備就緒”警報,但沒有“檢測到送出”。

感謝@Ken Browning 和@russau 為我指明了劫持__doPostBack 的方向。我已經看到了幾種不同的方法:

  1. 對我自己的 __doPostBack 版本進行硬編碼,然後將其放在頁面上,以便覆蓋標準版本。
  2. 在頁面上重載 Render 並將我自己的自定義程式碼注入現有的 __doPostBack。
  3. 利用 Javascript 的功能特性並創建一個鉤子以向 __doPostBack 添加功能。

由於幾個原因,前兩個似乎不受歡迎(例如,假設將來其他人需要將自己的功能添加到 __doPostBack)所以我選擇了#3。

這個addToPostBack函式是我用來添加函式的常見 pre-jQuery 技術的變體,window.onload,它執行良好:

addToPostBack = function(func) {
   var old__doPostBack = __doPostBack;
   if (typeof __doPostBack != 'function') {
       __doPostBack = func;
   } else {
       __doPostBack = function(t, a) {
           if (func(t, a)) old__doPostBack(t, a);
       }
   }
};

$(document).ready(function() {
   alert("Document ready.");
   addToPostBack(function(t,a) {
       return confirm("Really?")
   });
});

**編輯:**更改 addToPostBack 以便

  1. 它可以採用與 __doPostBack 相同的參數
  2. 添加的函式發生在 __doPostBack 之前
  3. 添加的函式可以返回 false 以中止回發

引用自:https://stackoverflow.com/questions/1230573