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

时间:2012-03-15 11:50:39

标签: c# jquery asp.net postback

我有常用功能,我在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("kodid");
        }
        else
            $(this).find('.AddNewGeneralPanelStyle').text("");

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

        });

    });
  }
});

7 个答案:

答案 0 :(得分:21)

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

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

   // put all your javascript functions here 

  });
}

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

答案 1 :(得分:13)

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

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

以下是related question,其中显示了在UpdatePanel刷新时如何重新订阅您的活动。

答案 2 :(得分:7)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:1)

面临同样的问题。改变

$(document).ready(function() {

Sys.Application.add_load(function() {

这将迫使它甚至在部分postbacck上运行

答案 6 :(得分:-1)

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

function pageLoad(sender,args){

}