从asp.net中的代码调用jquery函数似乎不起作用

bal*_*569 10 c# asp.net jquery updatepanel code-behind

我在将记录插入数据库后调用了一个jquery函数...

ScriptManager.RegisterClientScriptBlock(LbOk, typeof(LinkButton), "json",
                             "topBar('Successfully Inserted');", true);
Run Code Online (Sandbox Code Playgroud)

我已将其包含在我的母版页中,用于在回发后执行jquery函数,

<script type="text/javascript">
    function load() {
 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
      }
    function EndRequestHandler()
       {
           topBar(message);
     }


 function topBar(message) {
    alert(a);
    var alert = $('<div id="alert">' + message + '</div>');
    $(document.body).append(alert);
    var $alert = $('#alert');
    if ($alert.length) {
        var alerttimer = window.setTimeout(function() {
            $alert.trigger('click');
        }, 5000);
        $alert.animate({ height: $alert.css('line-height') || '50px' }, 200).click(function() {
            window.clearTimeout(alerttimer);
            $alert.animate({ height: '0' }, 200);
        });
    }
}
    </script>

<body onload="load();">
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用......任何建议..

Dav*_*ard 3

假设您的代码隐藏在 UpdatePanel 刷新期间运行,您的 EndRequest 处理程序和代码隐藏注册之间是否可能存在不良交互?topBar() 应该被调用两次,一次使用“成功插入”消息,然后使用 EndRequest 中未定义的参数调用一次(除非消息变量是在我们在这里看不到的地方定义的)。

另请记住,$('#alert')可以退回不止一件商品。如果 topBar() 被多次调用,则可能是这种情况。

首先,如何做这样的事情来减轻这种意想不到的副作用:

function topBar(message) {
  var $alert = $('<div/>');

  $alert.text(message);

  $alert.click(function () {
    $(this).slideUp(200);
  });

  $(body).append($alert);

  // Doesn't hurt anything to re-slideUp it if it's already
  //  hidden, and that keeps this simple.
  setTimeout(function () { $alert.slideUp(200) }, 5000);
}
Run Code Online (Sandbox Code Playgroud)

这并不能解决 EndRequest 和 Register*Script 都执行 topBar() 的问题,但这应该可以防止它们发生冲突,以便您可以更好地看到发生了什么。

尝试一下,让我们知道这是否会改变情况。