#codeigniter
#codeigniter
Вопрос:
я пытаюсь реализовать maykinmedia / dual-listbox в моем приложении CI, плагин работает нормально, но когда я отправляю форму, переменная $ _POST не содержит никакого значения. Я могу предоставить часть javascript, но это стандартная инициализация для плагина, данные передаются контроллером CI. Пожалуйста, помогите. В данном случае под html-частью отсутствует имя из тега select, но даже добавление его не меняет результат.
<select id="data" class="kt-dual-listbox" multiple
data-available-title="Source Options"
data-selected-title="Destination Options"
data-add="<i class='flaticon2-next'></i>"
data-remove="<i class='flaticon2-back'></i>"
data-add-all="<i class='flaticon2-fast-next'></i>"
data-remove-all="<i class='flaticon2-fast-back'></i>"
>
<?php foreach ($contents_data_data as $content_data_data){ ?>
<option value="<?= $content_data_data->id ?>"><?= $content_data_data->name ?></option>
<?php } ?>
</select>
Определение класса
var KTDualListbox = function () {
// Private functions
var initDualListbox = function () {
// Dual Listbox
var listBoxes = $('.kt-dual-listbox');
listBoxes.each(function(){
var $this = $(this);
var id = '#' $this.attr('id');
// get titles
var availableTitle = ($this.attr('data-available-title') != null) ? $this.attr('data-available-title') : 'Available options';
var selectedTitle = ($this.attr('data-selected-title') != null) ? $this.attr('data-selected-title') : 'Selected options';
// get button labels
var addLabel = ($this.attr('data-add') != null) ? $this.attr('data-add') : 'Add';
var removeLabel = ($this.attr('data-remove') != null) ? $this.attr('data-remove') : 'Remove';
var addAllLabel = ($this.attr('data-add-all') != null) ? $this.attr('data-add-all') : 'Add All';
var removeAllLabel = ($this.attr('data-remove-all') != null) ? $this.attr('data-remove-all') : 'Remove All';
// get options
var options = [];
$this.children('option').each(function(){
var value = $(this).val();
var label = $(this).text();
var selected = ($(this).is(':selected')) ? true : false;
options.push({ text: label, value: value, selected: selected });
});
// get search option
var search = ($this.attr('data-search') != null) ? $this.attr('data-search') : "";
// clear duplicates
$this.empty();
// init dual listbox
var dualListBox = new DualListbox(id,{
addEvent: function(value) {
console.log(value);
},
removeEvent: function(value) {
console.log(value);
},
availableTitle: availableTitle,
selectedTitle: selectedTitle,
addButtonText: addLabel,
removeButtonText: removeLabel,
addAllButtonText: addAllLabel,
removeAllButtonText: removeAllLabel,
options: options
});
if (search == "false"){
dualListBox.search.classList.add('dual-listbox__search--hidden');
}
});
}
return {
// public functions
init: function() {
initDualListbox();
}
};
}();
Комментарии:
1. вам нужно установить атрибут name
<select name="your_db_col_name">
2. Привет, Викель, спасибо за твой ответ; но, как я уже писал, даже добавление имени по-прежнему не работает. Если я напечатаю переменную $ _POST после отправки, я смогу увидеть все остальные поля, но не одно из двойного списка. Если я добавлю обычный select, он будет работать. В этом проекте я также использую angularjs, может ли проблема быть результатом какого-то конфликта? Спасибо
3. О, я пропустил эту часть … может быть, вам следует добавить соответствующую часть javascript (отправляется ли она через ajax?) к вашему вопросу (не в качестве комментария)
4. только что добавлено, оно не отправляется на контроллер CI, в котором я использую проверку формы для проверки отправки.
5. не знаю плагин, но смотрю на их github ( github.com/maykinmedia/dual-listbox ), похоже, вам нужно получить переменные POST из 2-го списка (выбранные параметры)
Ответ №1:
комментируя эту строку
$this.empty();
в файле javascript решите проблему; но тогда в списке параметров источника будет отображаться 2 раза один и тот же параметр.