Перестановка событий в jQuery после обновления Ajax (обновленная панель)

У меня есть несколько элементов ввода и опции на моей странице, каждая из которых (ну почти) имеет событие, связанное с обновлением какого-либо текста на странице после их изменения. Я использую jQuery, который действительно очень крут :)

Я также использую Microsoft Ajax framework, используя UpdatePanel. Причина, по которой я делаю это, состоит в том, что определенные элементы создаются на странице на основе некоторой логики на стороне сервера. Я действительно не хочу объяснять, почему я использую UpdatePanel - даже если бы он мог (с некоторыми усилиями) перезаписать, чтобы использовать только jQuery, я все еще хочу, чтобы UpdatePanel.

Вы, наверное, догадались об этом - как только у меня появится обратная передача в UpdatePanel, события jQuery перестают работать. Я действительно ожидал этого, поскольку «postback» на самом деле не является новой обратной передачей, поэтому мой код в document.ready, который связывает события, больше не будет запущен. Я также подтвердил свое подозрение, прочитав его в библиотеках справки jQuery.

Во всяком случае, мне остается проблема с восстановлением моих элементов управления после обновления UpdatePanel, обновляющего DOM . Мне предпочтительно нужно решение, которое не требует добавления на страницу большего количества файлов .js (плагинов jQuery), но что-то такое же простое, как возможность улавливать «afterupdating» UpdatePanel, где я могу просто вызвать мой метод для повторной привязки всех элементов формы ,

asp.net,jquery,asp.net-ajax,updatepanel,

77

Ответов: 9


83 ов принято

Поскольку вы используете ASP.NET AJAX, у вас будет доступ к pageLoadобработчику событий, который будет вызываться каждый раз, когда страница будет возвращена, будь то полная или частичная из UpdatePanel. Вам просто нужно включить функцию на свою страницу, не требуется подключение.

function pageLoad(sender, args)
{
   if (args.get_isPartialLoad())
   {
       //Specific code for partial postbacks can go in here.
   }
}

23

Или вы можете проверить последнюю функциональность jQuery с помощью on()метода.


22
Sys.Application.add_load(initSomething);
function initSomething()
{
  // will execute on load plus on every UpdatePanel postback
}

уя 14

Начиная с jQuery 1.7, рекомендуется использовать синтаксис .on () jQuery .

Убедитесь, однако, что вы настроили событие на объект документа , а не на объект DOM. Например, это будет разорвано после обратной передачи UpdatePanel :

$(':input').on('change', function() {...});

... потому что «входы» были переписаны. Сделайте это вместо этого:

$(document).on('change', ':input', function() {...});

Пока документ находится вокруг, любые входы (в том числе из обновлений UpdatePanel) вызовут обработчик изменений.


9

Используйте следующий код

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);

function pageLoaded(sender, args) {
    var updatedPanels = args.get_panelsUpdated();
    // check if Main Panel was updated 
    for (idx = 0; idx < updatedPanels.length; idx++) {
        if (updatedPanels[idx].id == "<%=upMain.ID %>") {
            rebindEventsForMainPanel();
            break;
        }
    }
}
asp.net, JQuery, asp.net-Аякса, UpdatePanel,
Похожие вопросы