【问题标题】:How to execute a javascript function before update panel updates如何在更新面板更新之前执行 javascript 函数
【发布时间】:2013-01-27 21:13:19
【问题描述】:

我想在触发更新面板进行刷新之前运行一个 jQuery 函数。由于可以使用许多按钮和其他方式中的任何一种来完成此刷新,我希望使用提交处理程序或类似的东西,但它不起作用。

我尝试将事件附加到主窗体:

jQuery('form').submit(function () { alert('submit!'); });

还有这个附加到更新面板

jQuery('#pnlContent').submit(function () { alert('submit!'); });

有人知道怎么做吗?

【问题讨论】:

  • UpdatePanel 表单不是正常意义上的“提交”。它是通过 ajax “提交”的,所以这些事件不会触发。
  • @Chad 那我可以用什么代替?

标签: javascript jquery asp.net submit


【解决方案1】:

你可以使用 onsubmit="return check();"通知。它会在像这样提交表单之前检查此功能。

function check(){
   // do javascript code
   // after check your javascript
   document.getElementById("frm1").submit();
}

HTML:

<form id="frm1" action="#" onsubmit="return check();">
    First name: <input type="text" name="fname"><br>
    Last name: <input type="text" name="lname"><br>
    <input type="submit" name="submit" value="Submit form">
</form>

【讨论】:

    【解决方案2】:
    function PageLoad()
    {
        if (!window.Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())
        {
            window.Sys.WebForms.PageRequestManager.getInstance().add_endRequest( AjaxEnd );
            window.Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest( AjaxBegin );
        }
    }
    
    function AjaxEnd()
    {
        alert("AjaxEnd");
    }
    
    function AjaxBegin()
    {
        alert("AjaxBegin");
    }
    

    【讨论】:

      【解决方案3】:

      这对我有用。知道了here。基本上,您定义了一个在更新之前运行的函数,以及一个在更新之后运行的函数。然后注册这些函数以使用页面请求管理器运行。

      <script type="text/javascript">
          /* Put your code to run before UpdatePanel begins async postback here */
          function beforeAsyncPostBack() {
              var curtime = new Date();
              alert('Time before PostBack:   ' + curtime);           
          }
      
          /* Put your code to run after UpdatePanel finishes async postback here */
          function afterAsyncPostBack() {
              var curtime = new Date();           
              alert('Time after PostBack:    ' + curtime);
          }
      
          /* Don't mess with any of the below code */
          Sys.Application.add_init(appl_init);
      
          function appl_init() {
              var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance();
              pgRegMgr.add_beginRequest(beforeAsyncPostBack);
              pgRegMgr.add_endRequest(afterAsyncPostBack);
          }      
      </script>
      

      【讨论】:

      • AutoPostBack 似乎没有触发该事件,是否还有其他事件?
      • @Psddp 应该是。但是,如果您正在处理 UpdatePanel 并且不得不像这样破解,那么我强烈建议您重新考虑您的整个策略并放弃 UpdatePanel。与修复所有 UpdatePanel 和 Web 表单的废话相比,您将花费更少的时间来重写它。
      • 感谢您的建议!
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多