Как можно автоматически обновить содержимое элемента списка (li) при изменении текста в поле ввода (input) после потери фокуса?

Каким образом можно улучшить функцию `getBack`, чтобы она правильно обновляла заметки (`notes`) при изменении значения заметки?
  • 15 декабря 2023 г. 17:57
Ответы на вопрос 3
1. Для автоматического обновления содержимого элемента списка (li) при изменении текста в поле ввода (input) после потери фокуса, можно использовать событие `blur` на поле ввода. 
   Ниже приведен пример кода, демонстрирующий эту функциональность:

```html
<input type="text" id="inputField">
<ul id="list">
  <li>Заметка 1</li>
  <li>Заметка 2</li>
  <li>Заметка 3</li>
</ul>

<script>
  const inputField = document.getElementById('inputField');
  const listItems = document.querySelectorAll('#list li');

  inputField.addEventListener('blur', function() {
    const inputValue = inputField.value;

    listItems.forEach(function(item) {
      item.textContent = inputValue;
    });
  });
</script>
```

2. Чтобы улучшить функцию `getBack` для правильного обновления заметок (`notes`) при изменении значения заметки, можно использовать следующий подход:

- Добавить уникальный идентификатор для каждой заметки (например, `data-id` атрибут) и связать его с соответствующим элементом списка.
- При изменении значения заметки, обновить только соответствующий элемент списка, используя уникальный идентификатор.

Пример кода с улучшенной функцией `getBack`:

```html
<input type="text" id="inputField">
<ul id="list">
  <li data-id="1">Заметка 1</li>
  <li data-id="2">Заметка 2</li>
  <li data-id="3">Заметка 3</li>
</ul>

<script>
  const inputField = document.getElementById('inputField');
  const listItems = document.querySelectorAll('#list li');

  inputField.addEventListener('blur', function() {
    const inputValue = inputField.value;

    listItems.forEach(function(item) {
      const itemId = item.getAttribute('data-id');
      if (notes[itemId]) {
        notes[itemId] = inputValue;
        item.textContent = inputValue;
      }
    });
  });
</script>
```

Обратите внимание, что в этом примере используется переменная `notes`, предполагая наличие заранее определенного объекта `notes`, который хранит значения для каждой заметки.
Надо запоминать индекс кликнутого li . 

Здесь бы идеально подошел useReducer. 
1) Можно нормально задать состояние компонента, и можно ноомально все установить через dispatch.

PS., Извиняюсь, примеры приводить не буду, их есть в документации, да и у меня не совсем JS (а clojurescript). Но тем не менее - все тоже самое.
Похожие вопросы