Asp.net
如何在 ASP.NET 應用程序中使用 jQuery 擷取送出事件?
我正在嘗試使用 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 的方向。我已經看到了幾種不同的方法:
- 對我自己的 __doPostBack 版本進行硬編碼,然後將其放在頁面上,以便覆蓋標準版本。
- 在頁面上重載 Render 並將我自己的自定義程式碼注入現有的 __doPostBack。
- 利用 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 以便
- 它可以採用與 __doPostBack 相同的參數
- 添加的函式發生在 __doPostBack 之前
- 添加的函式可以返回 false 以中止回發