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

lokaqttq  于 2023-02-26  发布在  .NET
关注(0)|答案(8)|浏览(171)

我有一些常用函数,我将其折叠在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 () {

        });

    });
  }
});
jtjikinw

jtjikinw1#

这是因为updatepanel部分回发。下面是您需要做的。

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

   // put all your javascript functions here 

  });
}

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

0pizxfdo

0pizxfdo2#

由于您使用的是UpdatePanel,所以在回发之后,您附加了事件处理程序的DOM部分将被删除并重新创建,其效果是删除了jQuery在页面首次加载时附加的所有事件处理程序。
当您只回发页面的一部分时,jQuery$(function() {});不会再次触发,因此您的处理程序永远不会被重新附加。
下面是一个related question,它显示了如何在UpdatePanel刷新时重新订阅事件。

qcbq4gxm

qcbq4gxm3#

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

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

ruoxqz4g4#

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

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

4ktjp1zp5#

面临同样的问题。改变

$(document).ready(function() {

Sys.Application.add_load(function() {

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

yduiuuwa

yduiuuwa6#

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

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

http://msdn.microsoft.com/en-us/library/bb383810.aspx
请记住,如果您使用多个更新面板,则应检查刷新了哪个更新面板,并仅附加所需的事件,否则可能会多次触发事件。

zlwx9yxi

zlwx9yxi7#

我有一个有趣的情况,我想我会张贴我的解决方案在这里,以防它帮助任何人在未来。
我的问题是我的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>

为什么我需要在回发时重新添加事件,但也删除了前一个事件,这是我无法理解的。希望这能帮助一些人:)

fd3cxomn

fd3cxomn8#

你可以把所有的JavaScript代码放在下面的代码之间。
函数页面加载(发送方,参数){
}

相关问题