【问题标题】:Execute javascript after a partial postback of an updatepanel?在更新面板的部分回发后执行 javascript?
【发布时间】:2012-12-26 09:43:58
【问题描述】:

我有一个添加树文件脚本的页面。

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/init.js"></script>
<script type="text/javascript" src="js/easing.js"></script>

我有一个带有下拉列表的更新面板。运行 SelectedIndexChanged 事件(更新面板的部分回发)时,不要执行 javascript。

【问题讨论】:

标签: javascript asp.net


【解决方案1】:

使用pageLoad函数:

function pageLoad(sender, args) {
  InitialiseSettings();
}

function InitialiseSettings(){
    // replace your DOM Loaded settings here. 
    // If you already have document.ready event, 
    // just take the function part and replace here. 
    // Not with document.ready 
    $(element).slideUp(1000, method, callback});

    $(element).slideUp({
                   duration: 1000, 
                   easing: method, 
                   complete: callback});
}

或者,尝试使用.add_endRequest() 添加“结束请求”事件处理程序:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(InitialiseSettings)

编辑:

您最好将代码从document.ready 移动到InitialiseSettings(),然后将其注册为pageLoaded 事件处理程序。

代码示例

 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(InitialiseSettings)

【讨论】:

  • 非常感谢,感谢 InitialiseSettings 中的初始化缓和。
  • 谢谢,我应该用这个:$(document).ready(function () {Sys.WebForms.PageRequestManager.getInstance().add_endRequest(InitialiseSettings) function InitialiseSettings() { //easing, other initialization goes here } }) &lt;/script&gt;
  • @Niloo,没有人没有。请分享更多代码。您的页面中有 document.ready 块吗?你在哪里配置这些缓动和所有。
  • 我在 document.ready 中添加了我的函数,它对我有用……非常感谢 :)
  • @Pierre,是的,它是兼容的
【解决方案2】:

要在全部和部分回发中运行您的 javascript,请将您的 javascript 代码放入 javascript pageLoad() 函数中。

function pageLoad()
{
   //your javascript code
}

例子:

function pageLoad() {

    $(':submit').click(function () {
        CommodityArray();
    });
    $('#btn_image').click(function () {
       CommodityArray();
    });
    $(".repHeader").disableSelection();

    CommodityArray();
}

希望对您有所帮助! :)

【讨论】:

  • @Aristos :: 你的意思是,这不适用于更新面板?你自己试过吗??
  • @Niloo:: 在 pageLoad(){ // } 中编写代码而不是 $(document).ready(function () { // } 以在每次页面重新加载或回发时运行它.
  • @Avishek:谢谢,我有 3 个脚本文件。如何将此添加到 pageload()
  • @Niloo :您不必在每次部分/完整回发后重新添加脚本文件。您只需在 js 文件中的 pageLoad(){ // } 内调用每次回发/写入事件后需要运行的函数。我还将用一个例子编辑答案.. :)
【解决方案3】:

您必须在更新面板后使用以下代码。

<script type="text/javascript" language="javascript">
var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
pageRequestManager.add_endRequest(NewCharacterCount);
</script>

NewCharacterCount 是您的 javascript 函数名称。

阅读这篇文章Sys.WebForms.PageRequestManager endRequest Event 希望对您有所帮助。

【讨论】:

    【解决方案4】:

    如果您正在使用 UpdatePanel,并且您想在更新面板中的内容刷新后调用 javascript 函数,您可以使用以下方式轻松完成。在页面body标签中,调用函数RefreshContent()

    <body onload="RefreshContent()">
    
    <script type="text/javascript">
      function RefreshContent()
      {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
      }
    
      function EndRequestHandler()
      {
        alert("Add your logic here" );
      }
    </script>
    

    参考链接 http://www.infoa2z.com/asp.net/how-to-call-javascript-function-after-an-updatepanel-asychronous-request-to-asp.net-page

    【讨论】:

      【解决方案5】:

      您可以使用PageRequestManager client events。 sender 参数将包含您需要的信息。例如,可以这样做:

      // Register event handler
      Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
      
      /// Executed when all page content is refreshed, full page or async postback: https://msdn.microsoft.com/en-us/library/bb397523.aspx
      function pageLoaded(sender, args) {
          var isPostBack = sender.get_isInAsyncPostBack();
          if(!isPostBack) return;
      
          // PostBack logic here.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-12
        • 2011-12-11
        • 2018-03-29
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多