Bootstrap Selectpicker не обновляется - PullRequest
1 голос
/ 07 октября 2019

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

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

$('#IncWidgetId').val(864)// the value used when breaking in console
$('#IncWidgetId').selectpicker('refresh')

Я обеспечил обновление селектора выбора новыми значениями параметров, а также подтверждение того, что отложенныйстрельба в правильном порядке. В качестве двойной проверки я также отделил .selectpicker('refresh'), чтобы убедиться, что он не пытался сработать до того, как опция была выбрана из-за асинхронности, но он все еще не обновляет селектор выбора с выбранным значением.

$(document).on('click', '[id^=EditWidgetId-]', function () {
  var id = $(this).attr('id').split('-')[1];
  var mfg = $(this).data('mfg');
  var widgetid = $(this).data('widgetid ');
  var mfgSelect = $('input[name=mfg][value="' + mfg + '"]');
  mfgSelect.prop('checked', true);

  $.when(LoadWidgets(mfg)).then(function () {
      console.log('then function');
      $('#IncWidgetId').val(widgetid );
  }).done(function () {
      console.log('done function');
      $('#IncWidgetId').selectpicker('refresh');
  });

  $('#modalWidgetNew').modal('show');
});

function LoadWidgets(mfg) {
  var r = $.Deferred();
  console.log('before ajax');

  r.resolve($.ajax({
      url: '/Widgets/FilterWidgetsDropdown',
      type: 'GET',
      cache: false,
      data: { mfg: mfg },
      success: function (partial) {
          $('#IncWidgetDDArea').html(partial);
          $('#IncWidgetId').selectpicker('refresh')
      },
      error: function (x, e) {
          if (x.status == 0) {
              alert('You are offline!!\n Please Check Your Network.');
          } else if (x.status == 404) {
              alert('Requested URL not found.');
          } else if (x.status == 500) {
              alert('Internel Server Error.');
          } else if (e == 'parsererror') {
              alert('Error.\nParsing JSON Request failed.');
          } else if (e == 'timeout') {
              alert('Request Time out.');
          } else {
              alert('Unknow Error.\n' + x.responseText);
          }
      }
  })).done(function () {
      console.log('after ajax');
      return r.promise();
  });
}

Чего мне не хватает?

1 Ответ

0 голосов
/ 08 октября 2019

В старых версиях этого плагина была такая проблема.
Попробуйте уничтожить его и инициализировать снова. Как то так:

$('#IncWidgetId').selectpicker('destroy');
$('#IncWidgetId').selectpicker();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...