2012-08-09 40 views
2

我在頁面上有ASP:Button。它呈現爲HTML像這樣:如何防止ASP:從jQuery點擊處理程序回發按鈕

<input type="submit" name="myButton" value="Do something" 
    onclick="javascript:WebForm_DoPostBackWithOptions(
     new WebForm_PostBackOptions('myButton', '', true, '', '', false, false))" 
    id="myButton" /> 

現在我試圖阻止該按鈕的默認行爲通過jQuery的事件處理程序(提交表單):

$('#myButton').click(function() { 
    // do some client-side stuff 

    if (someCondition) { 
     // don't postback! 
     return false; 
    } 
}); 

這裏的問題是,每次ASP粘貼在輸入上的內聯點擊處理程序似乎都在jQuery事件處理程序之前執行。這裏

最簡單的解決辦法是使用普通的input type="button"而不是ASP:Button,可惜這不是一個possibilty,因爲這ASP:Button確實是需要在這種情況下許多其他的事情。

什麼是防止表單提交發生的最佳方法?我想過使用字符串操作在元素的onclick屬性上添加我的處理程序,但這看起來很髒。我還想避免使用OnClientClick,因爲這需要我的處理函數公開​​曝光。有沒有更好的辦法?

+0

當您綁定事件處理函數時,它們將按照它們綁定的順序調用,因此它會先調用內聯函數,然後再調用您的處理函數。關於所有我能想到的是取消綁定默認值,綁定你的,然後重新綁定原始的 – MrOBrian 2012-08-09 20:25:11

+0

添加另一個想法到我的答案 – bUKaneer 2012-08-09 20:28:19

回答

0

我只是找到了一種方法

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     var ploopButton = null; 
     $("#ploop").click(function (e) { 
      ploopButton = this; 
     }); 
     $("#form1").submit(function (e) { 
      if (ploopButton !== null) { 
       ploopButton = null; 
       return confirm('are u sure?'); 
      } 
      return true; 
     }); 
    }); 
</script> 
<form id="form1" runat="server"> 
    <asp:Button ID="ploop" Text="ploop" runat="server" OnClick="ploop_Click" /> 
</form> 

基本上你會使用一個全球性的標誌,指示哪個按鈕被點擊的服務器,你會確認表單提交時,標誌已打開

+0

我沒有想到這一點。我會試試看看它的外觀。 – jbabey 2012-08-10 13:40:25

2

您是否嘗試將OnClientClick="return false;"屬性添加到您的aspx按鈕控件?

不用擔心檢查出這個職位它提供了一個JavaScript事件卸載腳本:Is it possible to remove all event handlers of a given element in javascript?

我覺得你有興趣的最後一個方法DomLib.prototype.removeEventsByTypeEx

+0

我想避免使我的處理函數公開​​,所以這將是最後的手段;我已經更新了我的問題以包含此內容。 – jbabey 2012-08-09 20:21:52

0

我覺得叫「的preventDefault」關於JavaScript事件是你在找什麼。這將阻止回發到

$('#myButton').click(function (event) { 
    //Call prevent default on the event to prevent submitting the form 
    event.preventDefault(); 
    // do some client-side stuff 

    if (someCondition) { 
     // don't postback! 
     return false; 
    } 
}); 
+0

這不起作用。內聯處理程序在jQuery處理程序觸發之前提交表單。同樣,'return false'等同於'e.preventDefault(); e.stopPropagation();'。 – jbabey 2012-08-09 20:23:30

+0

嘿,看到你的onclick處理程序,它看起來像是試圖發佈表單。因此,無論您使用哪種類型的按鈕,onclick處理程序都會發布該表單。不知何故,需要改變以解決您的問題,我認爲 – DEmmerthal 2012-08-09 20:28:57

相關問題