У вас есть скрипт для кастомного селекта, который обновляет значение скрытого инпута с помощью следующего кода:
<pre><code class="javascript">let input = select.querySelector(".select-input");
...
input.value = option.dataset.val;</code></pre>
Теперь вам нужно создать отдельный скрипт, который будет отслеживать изменение значения этого инпута. Как можно добавить триггер события 'change' для изменения значения input.value?
Для того чтобы отслеживать изменения значения скрытого инпута и реагировать на них, вы можете использовать событие `change`. Наиболее простой способ — это добавить обработчик события для вашего инпута сразу после того, как вы обновили его значение.
Вот пример, как это можно сделать:
```javascript
// Получаем ссылку на скрытый инпут
let input = select.querySelector(".select-input");
// Обработчик события change
input.addEventListener("change", function() {
console.log("Значение инпута изменилось на: ", this.value);
// Здесь вы можете добавить любую другую логику, которая требуется при изменении значения
});
// Функция для обновления значения инпута
function updateInputValue(val) {
input.value = val;
// После обновления значения вызываем событие change
let event = new Event('change'); // Создаем новое событие
input.dispatchEvent(event); // Вызываем его
}
// Пример использования
function onOptionSelect(option) {
updateInputValue(option.dataset.val);
}
```
В этом коде мы сначала добавляем обработчик события `change` на скрытый инпут. Затем, когда мы собираемся обновить его значение (в функции `updateInputValue`), мы создаем новое событие `change` с помощью `new Event('change')` и вызываем его с помощью `input.dispatchEvent(event)`.
Таким образом, обработчик события `change` сработает, когда вы обновите значение инпута через вашу функцию.
Через dispatchEvent? <br/> <br/> <pre><code class="html"><body>
<select>
<option>1</option>
<option>2</option>
</select>
<input class="select-input" type="hidden"/>
<script>
const select = document.querySelector('select')
const hiddenInput = document.querySelector('.select-input')
const hiddenInputEvent = new InputEvent('change')
select?.addEventListener('change', e => {
hiddenInput.value = e.target.value
hiddenInput.dispatchEvent(hiddenInputEvent)
})
hiddenInput?.addEventListener('change', e => {
console.log(hiddenInput.value)
})
</script>
</body></code></pre> <br/> <br/>