画面にこのウィジェットがあり、含まれているデータとそのクラスをサーバー側に基づいて変更し、マウスのクリックに応答します。複数のクライアントに同時に更新を通知するために 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(){
クリックに反応するようです。残念ながら、ポストバックが完了するまでのみです。