После обратной передачи моя функция JavaScript не работает в ASP.NET

У меня есть общие функции, и я сворачиваю его на 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 () {

        });

    });
  }
});

Ответ 1

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

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

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

Ответ 2

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

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

   // put all your javascript functions here 

  });
}

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

$(document).ready(function() {

к

Sys.Application.add_load(function() {

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