0

画面にこのウィジェットがあり、含まれているデータとそのクラスをサーバー側に基づいて変更し、マウスのクリックに応答します。複数のクライアントに同時に更新を通知するために SignalR を使用しています。私が抱えている問題は、マークアップを含むすべてのものを更新パネルに配置したことです (そうしないと、毎回ページ全体をポストバックする必要があり、それはひどいユーザー エクスペリエンスです)。 iconThing" ID がボタンのクリックに反応しなくなりました。

私が使用していた元のクリック機能は

$("#iconThing").click(function () {
    $(this).parent(".activity-pad").toggleClass("hidden-pad");});

さまざまなオンライン ソースとスタック オーバーフロー自体を閲覧した後、SignalR Update Panel Only Works First Timeに出くわしました。すべて(かなり説明的なものだと思いますが、私はjavascriptとjqueryに慣れていないので、助けていただければ幸いです)

 $(document).on("click", "#iconThing", function(){
        $(this).parent(".activity-pad").toggleClass("hidden-pad");});

マークアップ自体は (PadColorSetter は、出力のベースとなるサーバー側の文字列です。テスト済みで動作しています (ビジュアルは意図したとおりに変化します)。onclick 機能自体が強制終了しているように見えます)。

    <asp:UpdatePanel runat="server" id="upActivityPadModule" IsUpdatePanel="true">
        <ContentTemplate>
<div class="activity-pad hidden-pad">
  <div class="icon <%# PadColorSetter %>" id="iconThing">
    Activity Pad
  </div>
  <div class="top <%# PadColorSetter %>">
  </div>
  <div class="middle <%# PadColorSetter %>">
    <div class="middle-content">
     <script type="text/javascript">
     // SignalR
     $(function () {
     // Declare a proxy to reference the hub.
     var padUpdater = $.connection.activityPadHub;
     //$.connection.hub.start();

     // Create a function that the hub can call to broadcast messages.
     padUpdater.client.ActivityPadRefresh = function () {

     __doPostBack('<%= upActivityPadModule.ClientID %>', '');
     };

     // Start the connection.
     $.connection.hub.start().done(function () {
     // Call the ActivityPadRefresh method on the hub.
     padUpdater.server.ActivityPadRefresh();
     });
     });
</script>

    </div>
  </div>
  <div class="bottom <%# PadColorSetter %>">
  </div>
</div>
        </ContentTemplate>
      </asp:UpdatePanel>

編集。:

$("#iconThing").bind("click", function () {

それ以外の

$(document).on("click", "#iconThing", function(){

クリックに反応するようです。残念ながら、ポストバックが完了するまでのみです。

4

1 に答える 1

0

他の誰かが同じ問題に苦しんでいる場合、私を救ったのは:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
    $("#iconThing").bind("click", function () {
        //$("#iconThing").click(function () {
        $(this).parent(".activity-pad").toggleClass("hidden-pad");
    });
});
于 2013-10-30T17:08:00.547 に答える