繁体   English   中英

SignalR回发导致jQuery操作停止工作

[英]SignalR postback causes jQuery actions to stop working

我在屏幕上看到了此小部件,该小部件会根据某些服务器端更改其中包含的数据及其类,并对鼠标单击做出响应。 我正在使用SignalR同时通知多个客户端更新。 我遇到的问题是,我已将包括标记在内的所有内容都放在了更新面板中(否则,我每次都必须回发整个页面,这是一种糟糕的用户体验),并且在第一次回发后,我的图片带有“ iconThing“ ID不再对按钮点击做出反应。

我使用的原始点击功能是

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

在浏览了各种在线资源并且堆栈本身溢出之后,我偶然发现SignalR Update Panel仅第一次使用时才能从理论上解决我的问题-除了我基于此添加的新代码不再响应点击的事实全部(我敢打赌,这是相当解释性的,但是我对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(){

似乎对点击做出反应。 不幸的是,直到回发完成。

万一其他人都在为同一问题而苦苦挣扎,救了我的是:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
    $("#iconThing").bind("click", function () {
        //$("#iconThing").click(function () {
        $(this).parent(".activity-pad").toggleClass("hidden-pad");
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM