#javascript #jquery #html #materialize
#javascript #jquery #HTML #материализовать
Вопрос:
Я пытаюсь поместить меню выбора в модальное и сталкиваюсь со странной проблемой, заключающейся в том, что меню выбора загружается с помощью display: none, поэтому оно скрыто, это нормальное поведение с materialize?
В поле name над выбором отображается только первая запись из выбора, если я не удалю display: none в инспекторе, который затем позволяет мне выбрать любое значение из моего выбора, повторяя это значение выше. Что я делаю не так?
это div, в который я добавляю выбор
<div class="input-field col s12">
<select class="custName">
</select>
<label>Select Customer</label>
</div>
Я вызываю это в конце моей HTML-страницы
<script>$(document).ready(function(){
$('select').formSelect();
});</script>
создание моих вариантов выбора здесь
const custData = (data) => {
if (data.length) {
let html = '';
data.forEach(doc => {
const cust = doc.data();
//console.log(cust);
const select = `
<select>
<option value=${cust.customerId}>${cust.name}, ${cust.address.postCode}</option>
</select>
`;
html = select;
});
customerList.innerHTML = html;
} else {
customerList.innerHTML = '<ul class="center-align">no data</ul>'
}
};
Пожалуйста, избавьте меня от моих страданий
Комментарии:
1. Вы должны инициализировать formSelect () при выборе после того, как ваш модал открыт, чтобы он работал.
Ответ №1:
Проблема в том, что ваш $('select').formSelect();
выполняется до того, как вы заполняете свои теги опций.
Решение: выполните вызов инициализации после кода заполнения вашего параметра.
Примечание: не заключайте каждый тег опции в тег выбора в вашей функции custData()
Например, этот выполняет инструкцию инициализации перед заполнением :
<!DOCTYPE html>
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</head>
<body>
<div class="input-field col s12">
<select id="s_1" class="custName">
</select>
<label>Select Customer</label>
</div>
<script type="text/javascript">
var select = document.getElementById("s_1");
var options = "<select><option value = 1>1</option></select><select><option value = 2>2</option></select><select><option value = 3>3</option></select>";
setTimeout(function(){ select.innerHTML = options; }, 1000);
$(document).ready(function() {
$('select').formSelect();
});
</script>
</body>
</html>
Этот выполняет инициализацию после заполнения:
<!DOCTYPE html>
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</head>
<body>
<div class="input-field col s12">
<select id="s_1" class="custName">
</select>
<label>Select Customer</label>
</div>
<script type="text/javascript">
var select = document.getElementById("s_1");
var options = "<select><option value = 1>1</option></select><select><option value = 2>2</option></select><select><option value = 3>3</option></select>";
setTimeout(function(){ select.innerHTML = options; $('select').formSelect();}, 3000);
$(document).ready(function() {
$('select').formSelect();
});
</script>
</body>
</html>
Ответ №2:
Вы должны инициализировать formSelect () при выборе после открытия вашего модала, чтобы он работал. Замените modal_id вашим атрибутом modal id.
$('#modal_id').on('shown.bs.modal', function (e) {
$('select').formSelect();
});