Не удается получить двухколонный мультиселект для заполнения при редактировании существующей записи из AJAX - PullRequest
2 голосов
/ 05 июля 2019

Используемая архитектура - это MVC в OO Coldfusion. При попытке редактировать существующую запись, запись должна заполнять форму при вызове. Все поля формы заполняются, как и ожидалось, за исключением множественного выбора из двух столбцов («дилеры»), который извлекает данные через AJAX. В форме есть еще один мультиколлекция («территории») с двумя столбцами, которая заполняется так, как должна; тем не менее, он получает данные с помощью запроса к контроллеру. Мультиселект «дилеры» выполняет вызов AJAX, используя данные, полученные «территориями», в качестве параметров для своего вызова AJAX. AJAX возвращает ожидаемые данные. Используя jQuery, я не могу заставить его заполнить столбцы с множественным выбором вообще.

Я зарегистрировал каждый шаг вызова AJAX и проверил, чтобы возвращаемые данные исправлялись во всей функции. Где это терпит неудачу, находится внутри if / else цикла for. Я могу видеть в журнале консоли результаты, и они правильно представлены в правильных блоках «если» или «еще» в «для». Они просто не будут отображаться в столбцах множественного выбора при попытке добавления с использованием jQuery. Нет ошибок JavaScript, jQuery или Coldfusion, возвращаемых или отображаемых. Единственное, о чем я могу думать, это то, что мультиселекты «дилеров» каким-то образом очищаются, но после комментирования всего, что я нашел, что может быть причиной, я все еще не могу получить данные для заполнения мультиселектов. Я полностью в замешательстве.

ОБНОВЛЕНИЕ : Эта проблема, по-видимому, возникает только в Chrome (v75.0.3770.100, 64-разрядная версия), когда я пытался воспроизвести ее в Firefox Developer Edition (v68.0b12, 64-разрядная версия) и коде. работал как положено. Все еще ищу какую-либо помощь или понимание, поскольку я не могу найти что-то конкретное в отношении проблем с Chrome, связанных с множественным выбором.

function getDealers(territoryIDArray) {
  console.log(territoryIDArray);
  clearMultiSelect($('#dealer-select'));
  var territoryData = territoryIDArray.join(',');
  var $dealerData = $('#selectDealerIDs');
  $.ajax({
    url: '/WebServices/dealerRetriever.cfm',
    data: {
      territoryID: territoryData
    }
  })
  .done(function(results, status, xhr) {
    // console.log(results);
    var data = JSON.parse(results);
    var mycolumns = data.COLUMNS;
    var mydata = data.DATA;
    if ((typeof(mycolumns) == 'object') && (typeof(mydata) === 'object')) {
      if (data.ROWCOUNT === 0) {
        $dealerData.find('option').remove().end();
        $('#selectDealerIDs, #selectDealerIDs_to, #selectDealerIDs_rightAll, #selectDealerIDs_rightSelected, #selectDealerIDs_leftAll, #selectDealerIDs_leftSelected').prop('disabled', true);
        $dealerData.append('<option>NO DEALERS ASSOCIATED WITH</option><option>THE SELECTED TERRITORIES.</option><option>PLEASE SELECT ANOTHER</option><option>OR ADDITIONAL TERRITORIES</option>');
      } else {
        $dealerData.find('option').remove().end();
        $('#selectDealerIDs, #selectDealerIDs_to, #selectDealerIDs_rightAll, #selectDealerIDs_rightSelected, #selectDealerIDs_leftAll, #selectDealerIDs_leftSelected').removeAttr('disabled');
        for (var i = 0; i < data.ROWCOUNT; i++) {
          console.log($dealerData); // successful
          if (selectedDealerIds.length == 0 || selectedDealerIds.indexOf(mydata.DealerID[i].toString()) == -1) {
              console.log("In 'if': " + mydata.DealerID[i] + ", " + mydata.AccountNumber[i] + ": " + mydata.BusinessName[i] + ", " + mydata.BusinessCity[i]); // successful
              $($dealerData).append('<option class="dealerFrom_edit" value="' + mydata.DealerID[i] + '">' + mydata.AccountNumber[i] + ': ' + mydata.BusinessName[i] + ', ' + mydata.BusinessCity[i] + '</option>');
          } else {
              console.log("In 'else': " + mydata.DealerID[i] + ", " + mydata.AccountNumber[i] + ": " + mydata.BusinessName[i] + ", " + mydata.BusinessCity[i]); // successful
           $('#selectDealerIDs_to').append('<option class="dealerTo_edit" value="' + mydata.DealerID[i] + '">' + mydata.AccountNumber[i] + ': ' + mydata.BusinessName[i] + ', ' + mydata.BusinessCity[i] + '</option>');
          }
        }
      }
    } // end if
  }); // end success
}
...