[英]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
我只是剛剛開始研究綁定,解除綁定和觸發,因此我在這里的用法幾乎是“第一次”。
感謝您的幫助或建議。
小號
編輯:
這描述了我正在嘗試做的事情,並給出了一些陷阱:
這個怎么樣?
$(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();
在這里,您嘗試攔截本機事件偵聽器,但是有兩個錯誤:
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.