【问题标题】:Javascript event on page postback页面回发上的 Javascript 事件
【发布时间】:2011-01-17 14:38:29
【问题描述】:

是否有任何在回发时触发的 javascript 事件?

如果不是,如何在页面回发之后或之前立即运行客户端代码?

【问题讨论】:

  • +1 欢迎来到 Stack Overflow,布鲁诺。

标签: c# asp.net javascript


【解决方案1】:

我相信您正在寻找的是Sys.WebForms.PageRequestManager beginRequest Event

摘录:

beginRequest 事件在处理 异步回发开始并将回发发送到服务器。 您可以使用此事件调用自定义脚本来设置请求标头 或者启动一个动画来通知用户回发是 正在处理中。

代码示例:(来自链接)

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function BeginRequestHandler(sender, args)
    {
        var elem = args.get_postBackElement();
        ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing...');
    }
    function EndRequestHandler(sender, args)
    {
        ActivateAlertDiv('hidden', 'AlertDiv', '');
    }
    function ActivateAlertDiv(visstring, elem, msg)
    {
        var adiv = $get(elem);
        adiv.style.visibility = visstring;
        adiv.innerHTML = msg;                     
    }
</script>

我希望这会有所帮助。 PageRequestManager 类似乎鲜为人知,也很少被使用。

【讨论】:

    【解决方案2】:

    您可以像这样在页面加载中添加 javascript...

    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", 
        "alert('hello world');", true);
    

    Page.ClientScript.RegisterStartupScript(this.GetType(), "alertScript",
       "function Hello() { alert('hello world'); }", true);
    

    【讨论】:

      【解决方案3】:

      Page.ClientScript 对象有一个RegisterOnSubmitStatement 在任何输入提交表单后触发。这可能是也可能不是您要查找的内容,但我已使用它来通知用户可编辑表单中未保存的更改。

      与 RegisterStartupScript 相比,使用它的优势在于,使用 RegisterOnSubmitStatement,如果用户使用浏览器导航并返回,则使用 RegisterStartupScript 注入的任何脚本都可能再次触发,而 RegisterOnSubmitStatement 仅在用户提交了表格。

      【讨论】:

      • 谢谢,我会试试这个方法!
      【解决方案4】:

      我不知道你是否还需要,但看看这个:

      Run javascript function after Postback

      我用这个解决了我的问题:

      <script type="text/javascript">
      var prm = Sys.WebForms.PageRequestManager.getInstance();
      prm.add_endRequest(function (s, e) {
          alert('Postback!');
      });
      

      还有很多选择,比如

      $('#id').live('change', function (){});
      
      $(document).ready(function () {});
      ClientScriptManager.RegisterStartupScript(this.GetType(), "AKey", "MyFunction();", true);
      

      并继续前进。取决于你需要什么。

      问候 =)

      【讨论】:

        【解决方案5】:

        使用 AJAX,并为 onComplete 提供事件处理程序。

        【讨论】:

          【解决方案6】:

          表单标签上的onsubmit事件

          使用 jQuery 时是这样的

          $("#yourformtagid").submit(function () {
           ...
          }
          

          【讨论】:

          • jQuery?不确定 OP 是否想使用完整的框架来完成其任务;)
          • 但是每个站点都应该有 jQuery 以防万一:-)
          • 网页表单回发之前不会触发jQuery提交事件。
          【解决方案7】:

          回发后页面加载时不会触发 javascript 事件,但您可以将 javascript 添加到 html 模板(.aspx 文件)中,并且仅在页面已发布时运行它,如下所示:

          <script type='text/javascript'>
              var isPostBack = '<%= this.IsPostBack%>' == 'True';
              if (isPostBack) {
                  alert('It's a PostBack!');
              }
          </script>
          

          如果您想自定义 javascript 以仅在特定条件下运行(而不仅仅是任何回发),您可以在页面的类中创建一个页面级变量(受保护的或公共的)并执行类似的操作:

          var userClickedSubmit = '<%= this.UserClickedSubmit%>' == 'True';
          if (userClickedSubmit) {
              // Do something in javascript
          }
          

          (不反对ClientScript.RegisterStartupScript,这很好 - 有时您希望将 javascript 保留在页面模板中,有时您希望将其保留在页面类中。)

          【讨论】:

          • 这个答案是对其他答案中方法的有用补充
          猜你喜欢
          • 2023-04-03
          • 2012-05-05
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-23
          相关资源
          最近更新 更多