#javascript #html #jquery #css
Вопрос:
У меня есть 2 примера. Одна статика, которая работает нормально, и значения правильно отображаются в списке данных во время выполнения. В другом динамическом примере значения вообще не отображаются в списке данных во время выполнения. Я сделал их настолько идентичными, насколько мог.
Рабочий пример, JS:
var thisListShowsUp = ['Value1','Value2'];
var listToShow = view.$el.find('[data-id="listToShow"]');
var thisListDoNotShowUp = []
//fetchedItemFromDBList gets populated from get request from DB. See log
fetchedItemFromDBList.forEach(function(item)
{
thisListDoNotShowUp.push(item.stringValue);
});
console.log(thisListDoNotShowUp);
console.log(thisListShowsUp);
thisListShowsUp.forEach(function(item)
{
var option = document.createElement('option');
var stringValue = item.toString();
option.value = stringValue
listToShow.append(option);
});
Не работает пример, JS:
var thisListShowsUp = ['Value1','Value2'];
var listToShow = view.$el.find('[data-id="listToShow"]');
var thisListDoNotShowUp = []
//fetchedItemFromDBList gets populated from get request from DB. See log
fetchedItemFromDBList.forEach(function(item)
{
thisListDoNotShowUp.push(item.stringValue);
});
console.log(thisListDoNotShowUp);
console.log(thisListShowsUp);
thisListDoNotShowUp.forEach(function(item)
{
var option = document.createElement('option');
var stringValue = item.toString();
option.value = stringValue
listToShow.append(option);
});
HTML:
<input name="test" list="listToShow" />
<datalist id="listToShow" data-id="listToShow"></datalist>
бревно:
["foo1", "bar1"]
["Value1", "Value2"]
Ответ №1:
Существует конструктор для создания опции : новая опция()
Вам также необходимо использовать набор, чтобы избежать дублирования
ваш код может быть:
const
displayThis = new Set(['value1','value2']) // added values
, listToShow = document.querySelector('datalist[data-id="listToShow"]')
, fetchedItemFromDBList =
[ { stringValue: 'foo1' }
, { stringValue: 'bar1' }
]
fetchedItemFromDBList.forEach( item => displayThis.add( item.stringValue ))
displayThis.forEach( item => listToShow.appendChild(new Option('', item )))
<input name="test" list="listToShow" />
<datalist id="listToShow" data-id="listToShow"></datalist>
Комментарии:
1. Тот же результат. По-прежнему никаких видимых вариантов на выбор. Если я регистрирую datalist в консоли , внутренний HTML кажется правильным: Внутренний HTML: «<значение опции=»foo1″><значение опции=»foo1″></опция></опция><значение опции=»bar1″><значение опции=»bar1″></опция>»
2. Я попытался сделать это: var displayThis = [ ‘foo1’, ‘bar1’] fetchedItemFromDBList.forEach(функция(элемент){ displayThis .push(значение строки элемента) }); console.log(displayThis ); var listToShow = view.$el.find(‘[идентификатор данных=»listToShow»]’); displayThis . forEach(функция(элемент){ listToShow.append(новая опция(«, элемент )) }); Теперь в списке видны только «foo1» и «bar1». Все значения регистрируются
3. @SebasJun
fetchedItemFromDBList
уже содержит вашиdisplayThis
ценности