После обратной передачи моя функция JavaScript не работает в ASP.NET - PullRequest
11 голосов
/ 15 марта 2012

У меня есть общие функции, и я сворачиваю его на 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("kodid");
        }
        else
            $(this).find('.AddNewGeneralPanelStyle').text("");

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

        });

    });
  }
});

Ответы [ 6 ]

21 голосов
/ 15 марта 2012

Это из-за частичной обратной передачи панели обновления. вот что вам нужно сделать.

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

   // put all your javascript functions here 

  });
}

У меня была такая же проблема, и она работала для меня. Надеюсь, вам это тоже поможет.

13 голосов
/ 15 марта 2012

Поскольку вы используете UpdatePanel, часть DOM, к которой вы прикрепили свой обработчик событий, сбрасывается и воссоздается после обратной передачи.Это приводит к удалению любых обработчиков событий, которые были присоединены jQuery при первой загрузке страницы.

Когда вы отправляете обратно только часть страницы, jQuery $(function() {}); не запускается снова, поэтому ваши обработчикиполучить заново.

Вот связанный вопрос , который показывает, как повторно подписаться на ваши события при обновлении UpdatePanel.

7 голосов
/ 31 марта 2015

Это из-за updatepannel используется. Следующий код работает нормально. Просто вставьте свой код jquery в событие pageLoad, как показано ниже

function pageLoad(sender, args) {
     $(document).ready(function () {....}
}
2 голосов
/ 03 мая 2016

У меня та же проблема, я решил с этим кодом:

<script type="text/javascript">
    function pageLoad()
    {
        $('#datetimepicker2').datetimepicker();           
    }
</script>
1 голос
/ 19 февраля 2018

Столкнулся с той же проблемой.Измените

$(document).ready(function() {

на

Sys.Application.add_load(function() {

, это заставит его работать даже при частичном постбакке

1 голос
/ 15 марта 2012

Предполагается, что вы используете UpdatePanel для выполнения обратной передачи, а код JS привязан к HTML-элементам на панели обновлений, и вам необходимо прикрепить их снова при загрузке панели обновления. Вы можете подключить свой код к событию endRequest:

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

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

Имейте в виду, что если вы используете более одной панели обновлений, вы должны проверить, какая панель обновлений обновлена, и прикрепить только те события, которые необходимы, в противном случае вы рискуете запустить события более одного раза.

...