Выбрано: плагин jQuery не работает после обратной передачи в asp.net

я использую элемент управления http://harvesthq.github.io/chosen/ в drop-down list. Все идет хорошо, но я столкнулся с проблемой, например, если я устанавливаю свойство раскрывающегося списка, то есть AutoPostBack="true", после выбора одного элемента элемент управления теряет свое свойство и преобразуется в обычный drop-down list

Кто-нибудь может иметь представление об этом? Пожалуйста, предложите мне.

Спасибо


person JOJO    schedule 26.02.2014    source источник
comment
Проверьте, повторно ли инициализируется плагин jQuery при перезагрузке страницы.   -  person Colin Bacon    schedule 26.02.2014
comment
Это внутри UpdatePanel..??   -  person Mayank Pathak    schedule 26.02.2014


Ответы (4)


Если вы привязываете плагины в $(document).ready();, то добавьте этот код и проверьте.

$(document).ready(function(){
//Binding Code
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args) {
        //Binding Code Again
    }
});
person Bharadwaj    schedule 26.02.2014
comment
голосовать Я только что нашел это, и это также решило мою проблему. Спасибо! - person gmaness; 20.08.2014

попробуйте добавить этот код,

 <script type="text/javascript">
    $(document).ready(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
    });

    function PageLoaded(sender, args) {
        $("#dropdownid").chosen();
    }

</script>

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

person Anoop Joshi    schedule 26.02.2014
comment
Оба кода одинаковы... а также я не могу принять оба кода одновременно... так что не возражайте... я не знаю, кто чей код скопировал, но в любом случае этот код мне очень помог... еще раз спасибо. - person JOJO; 26.02.2014

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

Событие DOMReady больше не запускается после завершения вызова AJAX. Что я сделал, так это добавил этот код на страницу.

// handlers for msajax
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (sender, args) {

    try {
        args.get_request().set_userContext(args.get_postBackElement().id);
        $(window).trigger("beginMsAjaxRequest", [sender, args, args.get_postBackElement().id]);
    } catch (e) { }

});


Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {

    try {
        if (args.get_error() == undefined) {
            var sName = args.get_response().get_webRequest().get_userContext();
            $(window).trigger("endMsAjaxRequest", [sender, args, sName]);
        }
    } catch (e) { }

});

По сути, он расширяет встроенные события .NET AJAX для работы с jQuery. Однако он вернет id из UpdatePanel или что-то еще, что инициировало запрос AJAX, позволяя вам настроить таргетинг только на элементы управления внутри него, чтобы ваш плагин мог его обновить.

Пример такой..

$(window).on("endMsAjaxRequest", function(event, sender, args, sName) {

    // sname is the id of the UpdatePanel, so..
    $('.my-dropdown', '#' + sName).theDropDownPluginInit();

});

Надеюсь, это хорошо объясняет...

РЕДАКТИРОВАТЬ:

Вы также можете использовать событие begin, чтобы сделать что-нибудь, например, скрыть элементы или отключить их или что-то еще...

$(window).on("beginMsAjaxRequest", function(event, sender, args, sName) {

    // sname is the id of the UpdatePanel, so..
    $('#' + sName).fadeTo(300, 0.6); // fade the UpdatePanel to 60% opacity

});
person Michael Coxon    schedule 26.02.2014

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

Решение. Решение этой проблемы заключается в том, что нам нужно повторно применять подключаемый модуль jQuery каждый раз, когда выполняется асинхронный запрос или частичная обратная передача UpdatePanel. Для этого мы можем использовать обработчики событий, предоставляемые ASP.Net Framework, для обнаружения завершения асинхронного запроса или частичной обратной передачи UpdatePanel.

Код

  //On UpdatePanel Refresh
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (prm != null) {
      prm.add_endRequest(function (sender, e) {
          if (sender._postBackSettings.panelsToUpdate != null) {

              for (var selector in config) {
                  $(selector).chosen(config[selector]);
              }

          }
      });
  };

добавьте это в свой раздел javascript

person Wout Rosseel    schedule 11.05.2015