回发后我的 JavaScript 函数在 ASP.NET 中不起作用

问题描述 投票:0回答:8

我有常用的功能,我把它折叠在

CommonFunctions.js
在Scripts文件夹中。

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

我的

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 () {

        });

    });
  }
});
c# jquery asp.net postback
8个回答
28
投票

是因为updatepanel partial postbacks。这是你需要做的。

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

   // put all your javascript functions here 

  });
}

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


14
投票

由于您使用的是

UpdatePanel
,您附加事件处理程序的 DOM 部分将在回发后被删除并重新创建。这具有删除页面首次加载时由 jQuery 附加的任何事件处理程序的效果。

当您仅回发页面的一部分时,jQuery

$(function() {});
不会再次触发,因此您的处理程序永远不会重新附加。

这里有一个相关问题,它显示了如何在

UpdatePanel
刷新时重新订阅您的活动。


8
投票

因为用了

updatepannel
。以下代码工作正常。只需将您的
jquery
代码放入
pageLoad
事件中,如下所示

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

4
投票

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

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

4
投票

面临同样的问题。变化

$(document).ready(function() {

Sys.Application.add_load(function() {

这将迫使它甚至在部分回发时运行


1
投票

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

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

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

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


0
投票

我有一个有趣的情况,我想我会在这里发布我的解决方案,以防它在未来帮助任何人。

我的问题是我的 OnClick 事件在初始页面加载时触发,但在回发后没有触发。我的第二个问题是我的 OnClick 在初始页面加载时触发一次,然后随着回发的进行越来越多。

<script type="text/javascript">
  // function that adds my various OnClick events
  function AddOnClicks() {
    $('.myClass').off("click.highlight"); // .off added so the event doesn't fire multiple times after postbacks
    $('.myClass').on("click.highlight", function () { // note: ".highlight" is just naming the event
        // ... on click logic
    });
  }

  $(document).ready(function () {
    AddOnClicks(); // this works for initial page load only

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
        AddOnClicks(); // this works after postback         
    });
  });
</script>

为什么我需要在回发时重新添加事件,但还要删除前一个事件,这超出了我的理解范围。希望这对某人有帮助:)


-1
投票

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

function pageLoad(sender, args) {

}

© www.soinside.com 2019 - 2024. All rights reserved.