Невозможно заполнить столбец базы данных в раскрывающемся списке - PullRequest
0 голосов
/ 23 мая 2019

Эта проблема напоминает вопрос, который я задал несколько лет назад:

Параметр раскрывающегося списка jQuery: сначала выбран

Вот функция jQuery, которая успешно заполняетидентификатор раскрывающегося списка #namelist:

$('#edituserModal').on('show.bs.modal', function (e) {
    initializeSelect($('#namelist'), 'assets/process/getNames.php', function (item) { 
        return {
            value: item.name,
            text: item.name
        }
    }); 
});

Код, указанный выше, успешно заполняет раскрывающийся список HTML, выберите здесь:

<select id="namelist">
</select>

Вот код, который создает таблицу данных:

$('#datatable').DataTable({
    "searching": true,
    "paging": true,
    "serverSide": false,
    "type": "POST", 
    "ajax": {
        "url": "assets/process/getusers.php", 
        "dataSrc": ""
    },
    "columns": 
    [
        { "data": "null",
          "render": function ( data, type, row, meta )
          {
            return "<i class='far fa-edit editUser' 
                    title='Edit User' data-editdeptrepname='"+row.name+"'></i>";
          }
        },
        {"data": "username"},
        // few more columns
    ]
});

Пользователь нажимает на иконку с классом .editUser.Это событие onClick находится здесь:

$('#datatable').on('click', 'tr > td > .editUser', function(e){
  e.preventDefault();
  var $dataTable = $('#datatable').DataTable();
  var tr = $(this).closest('tr');
  var rowData = $dataTable.row(tr).data();

  var name = $(this).attr('data-name');

  $('#namelist').val(name);
  // $('#namelist').val(rowData.name); // <-- I tried this
  // $('#namelist').val(rowData.name).text(rowData.name); // <-- also tried this
  // $('#namelist option:first').val(rowData.name).text(rowData.name);  // <-- this too
  // $('#namelist option:first').val(name); // <-- this as well

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

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

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

Как вы увидите в последнем фрагменте кода, я пробовал несколько способовзаставить его работать, но все безрезультатно.

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

enter image description here

Что на Земле мне не хватает?Я делал это сто раз, и это никогда не подводило меня до сих пор.

1 Ответ

1 голос
/ 23 мая 2019

Вот оно:

 $('#datatable').on('click', 'tr > td > .editUser', function(e){
    e.preventDefault();

    // Here is where sould go your initializeSelect call
    initializeSelect($('#namelist'), 'assets/process/getNames.php', function (item) { 
        return {
            value: item.name,
            text: item.name
        }
    }); 

    var row = $(this).parent().parent();
    name = row[0].cells[0].innerText;
    $('#namelist option:first').val(name).text(name);

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

При этом вам больше не нужен слушатель событий модального шоу.

Надеюсь, это помогло.

...