0

過去数時間、これに対する解決策を探しましたが、役に立ちませんでした。OnClientClick で false を返すボタンをクリックすると、サーバーへのポストバックは発生しません。jquery を使用してボタンのクリック機能をトリガーすると、OnClientClick が最初に起動しますが、戻り値に関係なく、ポストバックが発生します。ここに簡単なサンプルがあります...

k...問題をより正確に示すコードを配置します。取り乱してすみません…

    <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="script/jquery-1.4.2.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <img onclick="$('#Button1').click();" runat="server" width="100" height="100" style="border:solid 1px black" /><br />
        <asp:Button ID="Button1" OnClick="Button1_Click" OnClientClick="return false;" runat="server" Text="Button" />
    </div>
    </form>
</body>
</html>

尋ねられたいくつかの質問に答えるために...私はユーザー コントロールを持っています。これは、2 つの画像を使用したロールオーバー ボタンと、サーバーを呼び出す非表示のボタンです。ボタンは Reflection を使用して、指定された OnClick ハンドラーを有効にして、コントロールが配置されている特定のページで関数を呼び出します。OnClientClick は、必要に応じて追加の Javascript アクションを提供するためにも使用されます。目に見えないがクリック可能なボタンを直接配線すると、すべてが正常に機能していました。ボタンを完全に非表示にし、表示すらしないことにしましたが、そのためには実際に画像がボタンに対してクリック イベントを発生させる必要がありました。

4

3 に答える 3

0

このコンテキストでjQueryクリックハンドラーの目的を誤解していると思いますが、onClientClickedイベントでfalseを返していません。

onClientClickedプロパティを使用して、サーバー側のボタンまたは画像のjQueryクリックハンドラーを接続する理由はありません。実行する必要のあるスクリプトにスクリプト呼び出しを接続するだけです。

このような:

<asp:Button ID="Button2" runat="server" Text="Trigger" onClientClick="doClientSideCheck();" />

<script type="text/javascript">
  function doClientSideCheck()
  {
    return false;
  }
</script>

一方、クライアント側のボタンまたは画像がある場合は、jQueryクリックハンドラーが適切です。

<input id="button1" type="button" class="myButtonClass" value="Submit" />

    <script type="text/javascript">
     $(document).ready(function()
        {
             $(".myButtonClass").click(function(e) { alert('button clicked ' + $(this).attr('id') ); });
         });
    </script>
于 2010-03-15T20:47:33.307 に答える
0

runat = "server"は、ポストバックが必要であることを示します。Button1で取得できない場合は、同じタグにOnClickとOnClientClickがあり、その組み合わせがrunat属性をオーバーライドしていることが原因である可能性があります。

于 2010-03-15T20:50:45.577 に答える
0

jQuery の click メソッドは、OnClick メソッドのように true または false を返しません。代わりに、それ自体への参照を返します。これは、jQuery メソッド呼び出しの連鎖を容易にするためです。

理想的には、一方のボタンから他方のボタンを呼び出すのではなく、Button1 と Button2 の両方の JavaScript から同じメソッドを呼び出すことです。ポストバックが必要な条件が必要な場合は、Button1.GetPostbackEventReference への呼び出しをそこに貼り付けることができます。

jQuery は、CSS クラスを使用してこれを処理すると、これも非常に簡単になります。

<asp:Button ID="Button1" CssClass="ButtonHandler" />
<asp:Image ID="Button2" CssClass="ButtonHandler" />

<script>
$(document).ready(function() {
    $(".ButtonHandler").click( function() {
        // stuff you want to do
        return false;
    });
});
</script>

これはまさにあなたが必要としているものではないかもしれませんが、正確に何を望んでいるのかをもう少し詳しく説明する必要があると思います.

于 2010-03-15T21:02:15.073 に答える