Возьмите innerHTML и вставьте его во входное значение, используя множество похожих селекторов классов

У меня есть сингл input , как показано ниже:

<input type='text' class='txtwarna' name='txtwarna' value=''/> 

И это HTML со многими похожими элементами, скажем, cls, такими как:

<div class = "ct-a">
    <ul class='wr'>
        <li class='cls color1'>Kuning</li>
        <li class='cls color2'>Putih</li>
        <li class='cls color3'>Hijau</li>
        <li class='cls color4'>Biru</li>                          
    </ul>
</div>
<div class = "ct-b">
    <ul class='wr'>
        <li class='cls color1'>Biru</li>
        <li class='cls color2'>Hitam</li>
        <li class='cls color3'>Putih</li>
        <li class='cls color4'>Merah</li>
        <li class='cls color5'>Coklat</li>
        <li class='cls color6'>Abu-abu</li>                         
    </ul>
</div>

Что я пробовал - не работает:

var strHtml = document.getElementsByClassName("cls");
var valInput = document.getElementsByClassName("txtwarna");
for (var i = 0; i  < strHtml.length; i++) {
    strHtml[i].addEventListener('click', function() {
        valInput.value = strHtml.innerHTML; 
});
}

Вопрос: Как получить каждую строку innerHTML, скажем, biru, putih, kuning и т. д., когда пользователь нажимает на нее, и вставлять строку innerHTML в одно входное значение?

Значение будет изменено в зависимости от клика пользователя.

Похоже, вы действительно хотите выбрать

pilchard 11.04.2023 13:29

Подождите, я попробую написать код с помощью select и показать его здесь

Paijo Papuastoros 11.04.2023 13:41

нет, не использую select

Paijo Papuastoros 11.04.2023 13:48

valInput — это массив: добавьте [0], чтобы получить элемент ввода следующим образом: document.getElementsByClassName("txtwarna")[0];

protob 11.04.2023 13:58

также не устанавливайте его на innerHTML, но textContent

pilchard 11.04.2023 13:59

используя document.getElementsByClassName("txtwarna")[0]; и textContent, дайте мне результат: undefined в качестве входного значения :) рабочий пример: jsfiddle.net/PaijoPapua/120egnuz/16

Paijo Papuastoros 11.04.2023 14:02
valInput.value = strHtml.innerHTML - strHtml является результатом getElementsByClassName, HTMLCollection. Это не имеет innerHTML.
CBroe 11.04.2023 14:06

Измените strHtml.innerHTML на this.innerHTML в обработчике кликов в jsfiddle.

protob 11.04.2023 14:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы, безусловно, можете сделать то, что вы просите, просто добавив прослушиватель click в документ и установив input.value в соответствии с textContent элемента, на который нажали. Здесь с помощью Element.matches() для делегата клики на li элементы с классом 'cls'.

const input = document.querySelector('.txtwarna');

document.addEventListener('click', (event) => {
  if (event.target.matches('li.cls')) {
    input.value = event.target.textContent;
  }
});
ul.wr {
  cursor: pointer;
}
<input type='text' class='txtwarna' name='txtwarna' value=''/> 

<div class = "ct-a">
    <ul class='wr'>
        <li class='cls color1'>Kuning</li>
        <li class='cls color2'>Putih</li>
        <li class='cls color3'>Hijau</li>
        <li class='cls color4'>Biru</li>                          
    </ul>
</div>
<div class = "ct-b">
    <ul class='wr'>
        <li class='cls color1'>Biru</li>
        <li class='cls color2'>Hitam</li>
        <li class='cls color3'>Putih</li>
        <li class='cls color4'>Merah</li>
        <li class='cls color5'>Coklat</li>
        <li class='cls color6'>Abu-abu</li>                         
    </ul>
</div>

Однако, похоже, вам действительно нужна функциональность элемента select.

<div class = "ct-a">
  <select class='wr'>
    <optgroup label = "ct-a">
      <option class='cls color1' value='Kuning'>Kuning</option>
      <option class='cls color2' value='Putih'>Putih</option>
      <option class='cls color3' value='Hijau'>Hijau</option>
      <option class='cls color4' value='Biru'>Biru</option>
    </optgroup>
    <optgroup label = "ct-b">
      <option class='cls color1' value = "Biru">Biru</option>
      <option class='cls color2' value = "Hitam">Hitam</option>
      <option class='cls color3' value = "Putih">Putih</option>
      <option class='cls color4' value = "Merah">Merah</option>
      <option class='cls color5' value = "Coklat">Coklat</option>
      <option class='cls color6' value = "Abuabu">Abuabu</option>
    </optgroup>
  </select>
</div>

не используйте select, пожалуйста. но ваш код выше работает.

Paijo Papuastoros 11.04.2023 14:07

на самом деле, я должен игнорировать ul и другие селекторы классов для других calling function. хорошо. хороший.

Paijo Papuastoros 11.04.2023 14:12

Отредактировано, чтобы делегировать только li.cls элементам

pilchard 11.04.2023 14:22
Ответ принят как подходящий

Вы должны установить value из valInput, чтобы перезаписать значение.

Выбранный элемент доступен через e.target.innerHTML

var strHtml = document.getElementsByClassName("cls");
var valInput = document.getElementsByClassName("txtwarna")[0];
var allLi = document.getElementsByTagName("li");

const onLiClick = (e) => {
  valInput.value = e.target.innerHTML;
}

Array.from(allLi).forEach(e => e.addEventListener('click', onLiClick));
<input type='text' class='txtwarna' name='txtwarna' value=''/> 

<div class = "ct-a">
    <ul class='wr'>
        <li class='cls color1'>Kuning</li>
        <li class='cls color2'>Putih</li>
        <li class='cls color3'>Hijau</li>
        <li class='cls color4'>Biru</li>                          
    </ul>
</div>
<div class = "ct-b">
    <ul class='wr'>
        <li class='cls color1'>Biru</li>
        <li class='cls color2'>Hitam</li>
        <li class='cls color3'>Putih</li>
        <li class='cls color4'>Merah</li>
        <li class='cls color5'>Coklat</li>
        <li class='cls color6'>Abu-abu</li>                         
    </ul>
</div>

это также работает, как я хочу. Итак, здесь работают два ответа (ниже ответа), как я и хотел. Я хочу проголосовать, но недостаточно репутации. хорошо, отметил/сохранил ваш ответ.

Paijo Papuastoros 11.04.2023 14:08

так что без li оно превращается в undefined верно?

Paijo Papuastoros 11.04.2023 14:14

Ну, если нет li, то evntListener не добавлен и onLiClick никогда не будет запущен. Вход останется пустым.

0stone0 11.04.2023 14:15
var strHtml = document.getElementsByClassName('cls');
var valInput = document.getElementsByClassName('txtwarna');
for (var i = 0; i < strHtml.length; i++) {
  strHtml[i].addEventListener('click', function (event) {
    valInput[0]['value'] = event.currentTarget['innerHTML'];
  });
}

Другие вопросы по теме