Как можно исправить ошибку "Uncaught TypeError: is not a function", которую я получаю при попытке использовать различные функции, такие как search и includes? Вот пример кода, который вызывает эту ошибку:
```javascript
window.onload = () => {
let input = document.getElementById('input');
input.oninput = function () {
let list = document.querySelectorAll('.ul li');
let value = input.value.trim();
if (value != '') {
list.forEach(function (item) {
if (item.textContent.includes(value)) {
// выполнить какие-то действия
}
})
}
};
}
```
HTML-код:
```html
<div class="search input-group" >
<input type="search" name="" class="input__form" id="input" placeholder="Поиск товаров..">
<ul class="ul list-group">
<li id="item1" class="item4 list-group-item">TWS Apple Airpods Pro 1</li>
<li id="item2" class="item4 list-group-item">TWS Apple Airpods Pro 2</li>
<li id="item3" class="item4 list-group-item">TWS Apple Airpods Pro 3</li>
</ul>
</div>
```
Ошибка "Uncaught TypeError: is not a function" возникает, когда вы пытаетесь вызвать функцию, но переменная, которой вы пытаетесь вызвать функцию, не является функцией.
На основании вашего примера кода, проблема может возникнуть из-за того, что вы используете метод `querySelectorAll` для получения списка элементов, но возвращается коллекция элементов NodeList, а не массив. В результата перед использованием методов `forEach` и `includes`, вам следует преобразовать NodeList в массив.
Вот исправленный код, который решит эту проблему:
```javascript
window.onload = () => {
let input = document.getElementById('input');
input.oninput = function () {
let list = Array.from(document.querySelectorAll('.ul li'));
let value = input.value.trim();
if (value != '') {
list.forEach(function (item) {
if (item.textContent.includes(value)) {
// выполнить какие-то действия
}
})
}
};
}
```
Теперь NodeList преобразуется в массив с помощью `Array.from`, и функции `forEach` и `includes` могут быть вызваны без ошибок.
Будьте внимательны, когда вы используете различные методы и функции в JavaScript. Убедитесь, что переменная, которую вы используете, является функцией, и что возвращаемые значения соответствуют вашим ожиданиям.
потому что querySelectorAll() возвращает не массив, а похожий на него объект (NodeList)
если нужен массив, нужно преобразовать вручную через Array.from()