1

我有一个 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

4

4 回答 4

2

这个怎么样?

$(document).ready( function() {
    $('.startbutton').click(function() {
        return confirm('Are you sure?');
    })
});
于 2009-03-14T22:21:59.943 回答
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;
        });
于 2009-03-15T11:51:38.747 回答
0

你的问题来自这里:

$(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();
    });
  });
于 2009-03-14T22:28:47.977 回答
0

对于 mi 作品: this.OnClientClick = "$.blockUI({ message: $('#ConfirmacionBOX'), css: { width: '275px' } });return false;"; 这是一个按钮(是一个按钮类)

于 2009-06-17T07:40:22.017 回答