簡體   English   中英

如何使用BlockUI和Jquery中斷ASP.NET按鈕的回發

[英]How do I interrupt an ASP.NET button postback with BlockUI and Jquery

我有一個ASP.NET頁,上面有許多ASP:Button實例。 對於某些用戶,我需要顯示一個確認提示,並且如果用戶選擇是,則將調用原始的回發方法。 否則,整個過程將被取消。

我已經運行了一個示例,但結果不一致,主要是在FF3中,我拋出了異常:

[Exception... "Illegal operation on WrappedNative prototype object"  nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"  location: "JS frame :: 

我已經查了這個錯誤,但是我在弄錯我要去哪里。 這是我的示例案例。 注意,現在我僅使用css類作為查找。 長期來說,如果證明有必要,我可以將控件的clientID嵌入我的JS中:)。

HTML片段:

<asp:Button ID="StartButton" runat="server" CssClass="startbutton" Text="Start" OnClick="OnStartClicked" />

使用Javascript:

$(".startbutton").each(function(){
            $(document).data("startclick", $(this).get()[0].click);
            $(this).unbind("click");
        }).click(function(){
            var oldclick = $(document).data("startclick");
            alert("hello");
            try
            {
                oldclick();
            }
            catch(err)
            {
                alert(err);
                alert(err.description);
            }
            return false;
        });

我后面的代碼相對簡單,OnStart方法僅執行Response.Write

我只是剛剛開始研究綁定,解除綁定和觸發,因此我在這里的用法幾乎是“第一次”。

感謝您的幫助或建議。

小號

編輯:

這描述了我正在嘗試做的事情,並給出了一些陷阱:

http://www.nabble.com/onClick-prepend-td15194791s27240.html

這個怎么樣?

$(document).ready( function() {
    $('.startbutton').click(function() {
        return confirm('Are you sure?');
    })
});

我已經解決了IE7和FF3的問題。

訣竅是通過按鈕上的ASP.NET屬性使回發作為“ onclick”工作(見下文)。 在Javascript中,當您讀取JQuery中的單擊時,會將其作為函數參考提取。

要使其工作,請清除onclick屬性(保存后),然后再調用它。

我下面的代碼顯示了它的作用。 這段代碼並不完整,因為我正在將其轉變為應用程序的通用提示。 它的布局也很糟糕! 但是至少它顯示了原理。

ASP.NET按鈕

<asp:Button ID="StartButton" runat="server" CssClass="startbutton" Text="Start" OnClick="OnStart" UseSubmitBehavior="false" />

使用Javascript:

$(".startbutton").each(function(){
            $(document).data("startclick", $(this).attr("onclick"));
            $(this).removeAttr("onclick");
        }).click(function(){

            $.blockUI({ message: $('#confirm'), css: { width: '383', cursor: 'auto' } }); 

            $("#yes").click(function(){ 

                $.unblockUI();
                var oldclick = $(document).data("startclick");
                try
                {
                    oldclick();
                }
                catch(err)
                {
                    alert(err);
                    alert(err.description);
                }
            });

            $("#no").click(function(){
                $.unblockUI();
            });


            return false;
        });

對於mi作品:this.OnClientClick =“ $ .blockUI({消息:$('#ConfirmacionBOX'),css:{width:'275px'}});返回false;”; 這是一個按鈕(是按鈕類)

您的問題來自這里:

$(document).data("startclick", $(this).get()[0].click);
...
var oldclick = $(document).data("startclick");
...
oldclick();

在這里,您嘗試攔截本機事件偵聽器,但是有兩個錯誤:

  1. 使用unbind不會刪除本地事件偵聽器,只會刪除與jQuery添加的事件監聽器。
  2. click是AFAIK,僅是IE的一種用於模擬點擊的方法,而不是事件處理程序本身

您必須使用onclick而不是將其值設置為null而不是使用unbind。 最后,不要將其存儲在$(document).data(...) ,添加其他按鈕時會遇到一些問題。 這是您可以使用的示例代碼:

  $("selector").each(function()
  {
    var oldclick = this.onclick;
    this.onclick = null;
    $(this).click(function()
    {
      if (confirm("yes or no ?")) oldclick();
    });
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM