【问题标题】:After postback my JavaScript function doesn't work in ASP.NET回发后,我的 JavaScript 函数在 ASP.NET 中不起作用
【发布时间】:2012-03-31 22:08:26
【问题描述】:

我有常用功能,我将其折叠在 Scripts 文件夹中的 CommonFunctions.js 上。

我将它包含在我的母版页中并在我的页面上使用它。当我在页面上回帖时,我的功能不起作用。

我的CommonFunctions.js

$(function () {

    gf();
    
   if (Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
        
        gf();
    }


 function gf(){

    $('.AddNewGeneralPanel').click(function () {

        if ($(this).find('.AddNewGeneralPanelStyle').text() == "") {
            $(this).find('.AddNewGeneralPanelStyle').text("(  Gizle  )");
            lastOpenId = $(this).attr("codeid");
        }
        else
            $(this).find('.AddNewGeneralPanelStyle').text("");

        $(this).next('.AddNewGeneralAccordionDiv').slideToggle('slow', function () {

        });

    });
  }
});

【问题讨论】:

  • 你在做部分回发吗?我的意思是使用条件回发更新面板?
  • 只是为了确认:这正是您使用的代码吗?我看到一个对“gf”函数的调用,但声明了一个“gF”函数。别忘了 JS 是区分大小写的
  • 是的,我使用更新面板。当我在页面上使用
  • 对不起,我在那里手动写的。编辑它。

标签: c# jquery asp.net postback


【解决方案1】:

这是因为 updatepanel 部分回发。这是你需要做的。

function pageLoad(sender, args)
{
  $(document).ready(function(){   

   // put all your javascript functions here 

  });
}

我遇到了同样的问题,它对我有用。希望对你也有帮助。

【讨论】:

  • 此代码在同一页面上工作,但我在 masterpage 中调用它。我尝试过,但对我不起作用
  • 母版页中是否有 scriptmanager 标签?如果不放在那里再试一次。
  • 我解决了这个问题谢谢postback
【解决方案2】:

由于您使用的是UpdatePanel,因此您已将事件处理程序附加到的 DOM 部分将在回发后被删除并重新创建。这具有删除页面首次加载时由 jQuery 附加的所有事件处理程序的效果。

当您只回发页面的一部分时,jQuery $(function() {}); 不会再次触发,因此您的处理程序永远不会重新附加。

这是一个related question,它显示了如何在UpdatePanel 刷新时重新订阅您的事件。

【讨论】:

  • 我添加了一个链接,可以帮助您了解如何重新订阅您的功能。
  • 感谢@JoshEarl,感谢 Mennan 提出这个问题。这对我很有帮助。
【解决方案3】:

这是因为使用了updatepannel。以下代码工作正常。只需将您的jquery 代码放入pageLoad 事件中,如下所示

function pageLoad(sender, args) {
     $(document).ready(function () {....}
}

【讨论】:

  • 需要的一个功能。谢谢! +1
【解决方案4】:

我有同样的问题,我已经用这个代码解决了:

<script type="text/javascript">
    function pageLoad()
    {
        $('#datetimepicker2').datetimepicker();           
    }
</script>

【讨论】:

    【解决方案5】:

    面临同样的问题。改变

    $(document).ready(function() {
    

    Sys.Application.add_load(function() {
    

    这将强制它在部分回传时运行

    【讨论】:

      【解决方案6】:

      假设您正在使用 UpdatePanel 进行回发,并且 JS 代码已附加到更新面板中的 HTML 元素,您需要在加载更新面板时再次附加它们。您可以在 endRequest 事件中连接您的代码:

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

      http://msdn.microsoft.com/en-us/library/bb383810.aspx

      请记住,如果您使用多个更新面板,则应检查刷新了哪个更新面板并仅附加需要的事件,否则您可能会触发多次事件。

      【讨论】:

        【解决方案7】:

        您可以将所有 JavaScript 代码放在以下代码之间。

        function pageLoad(sender, args) {

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-03
          • 2010-12-16
          相关资源
          最近更新 更多