Используемая архитектура - это 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
}