#javascript #listitem #disabled-control
Вопрос:
Я сейчас создаю конвертер валют, и я натыкаюсь на вопрос, который показывает, что я не могу прочитать свойство «Список классов» null. Я следую за видео на YouTube шаг за шагом. Интересно, в чем причина этой проблемы. Кто-нибудь может помочь, пожалуйста? Что я здесь делаю, так это в основном добавляю класс «отключено» в элемент списка, на который нажимается.
function newCurrenciesListItem(currency) {
if (currenciesList.childElementCount === 0) {
baseCurrency = currency.abbreviation;
baseCurrencyAmount = 0;
}
addCurrencyList.querySelector(`[data-currency=${currency.abbreviation}]`)**.classList.add("disabled");**
const baseCurrencyRate = currencies.find(c => c.abbreviation === baseCurrency).rate;
const exchangeRate = currency.abbreviation === baseCurrency ? 1 : (currency.rate / baseCurrencyRate).toFixed(4);
const inputValue = baseCurrencyAmount ? (baseCurrencyAmount*exchangeRate).toFixed(4) : "";
currenciesList.insertAdjacentHTML("beforeend",
`<li class="currency ${currency.abbreviation === baseCurrency ? "base-currency" : ""}" id=${currency.abbreviation}>
<img src=${currency.flagURL} class="flag">
<div class="info">
<p class="input"><span class="currency-symbol">${currency.symbol}</span><input type="text" placeholder="0.0000" value=${inputValue}></p>
<p class="currency-name"${currency.abbreviation} - ${currency.name}</p>
<p class="currency-rate">${exchangeRate} ${baseCurrency} = 1 ${currency.abbreviation}</p>
</div>
<span class="close">amp;times;</span>
`)
}
Комментарии:
1. В какой строке вы получаете
null
ошибку? Как вы получаете ценность?2. можете ли вы поставить свой код на stackblitz.com чтобы мы могли воспроизвести ошибку ?
3. добавление класса «отключено» ничего не отключает — вы хотите добавить атрибут «отключено», чтобы фактически отключить
Ответ №1:
addCurrencyList.querySelector(`[datacurrency=${currency.abbreviation}]`).classList.add("disabled");
Здесь вы выбираете элемент с помощью селектора атрибутов, но он возвращает значение null, поскольку совпадение не найдено(или, скорее всего, элемент не существует). Проверьте, является ли элемент, который вы ищете, дочерним элементом addCurrencyList
и имеет ли он атрибут data-currency
с тем же значением, что и в параметре( currency.abbreviation
).
Прочтите это и это, чтобы узнать больше о том, как работают селекторы атрибутов CSS.
Цитата:
Объект списка узлов, представляющий первый элемент, соответствующий указанным CSS-селекторам. Если совпадения не найдены, возвращается значение null. Создает исключение SYNTAX_ERR, если указанный селектор(селекторы) недопустим.
Источник: https://www.w3schools.com/jsref/met_document_queryselector.asp
Комментарии:
1. «но он возвращает значение null, потому что элемент не существует» — откуда вы знаете? OP не опубликовал НИКАКОГО html