1

多数の ASP:Button インスタンスを含む ASP.NET ページがあります。確認プロンプトを表示する必要がある場合もあります。ユーザーが [はい] を選択すると、元のポストバック メソッドが呼び出されます。それ以外の場合、プロセス全体がキャンセルされます。

例を実行していますが、一貫性のない結果が得られます。主に 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 を実行します。

私はバインド、アンバインド、およびトリガーを調べ始めたばかりなので、ここでの使用はほとんど「初めて」です。

助けやアドバイスをありがとう。

S

編集:

これは私がやろうとしていることを説明し、落とし穴の種類の概要も示しています。

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

mi の場合: this.OnClientClick = "$.blockUI({ message: $('#ConfirmacionBOX'), css: { width: '275px' } }); return false;"; これはボタンです(ボタンクラスです)

于 2009-06-17T07:40:22.017 に答える
0

あなたの問題はここから来ます:

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

ここでは、ネイティブ イベント リスナーをインターセプトしようとしますが、次の 2 つのエラーがあります。

  1. unbind を使用してもネイティブ イベント リスナーは削除されず、jQuery で追加されたものだけが削除されます
  2. click私の知る限り、クリックをシミュレートするために使用されるIEのみのメソッドであり、イベントハンドラー自体ではありません

onclickアンバインドを使用する代わりに、その値を null に設定する必要があります。最後に、 に保存しないで$(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 に答える