我有一个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
我刚刚开始研究bind,unbind和trigger,所以我在这里的用法几乎是“第一次”。
感谢您提供任何帮助或建议。
取值
编辑:
这描述了我正在尝试做的事情,同时也解决了这种陷阱:
答案 0 :(得分:2)
这个怎么样?
$(document).ready( function() {
$('.startbutton').click(function() {
return confirm('Are you sure?');
})
});
答案 1 :(得分:1)
我已经解决了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;
});
答案 2 :(得分:0)
你的问题来自:
$(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();
});
});
答案 3 :(得分:0)
for mi works: this.OnClientClick =“$ .blockUI({message:$('#ConfirmacionBOX'),css:{width:'275px'}}); return false;”; 这是一个按钮(是一个按钮类)