Я новичок в JavaScript, и я пытаюсь создать простой скрипт, который будет показывать в журнале консоли количество символов, введенных в текстовую область.
Вот мой html:
<section class = "hero is-info">
<div class = "hero-body">
<div class = "container">
<div class = "card">
<div class = "card-content">
<div class = "content">
<div class = "control has-icons-left has-icons-right">
<input class = "input is-large" type = "search" placeholder = "" /><span class = "icon is-medium is-left"><i class = "fa fa-search"></i></span><span class = "icon is-medium is-right"><i class = "fa fa-empire"></i></span>
</div>
</div>
</div>
</div>
</div>
а вот мой js:
const testArea = document.querySelector("#card-content");
function openDropDown(){
let textEnteredLength = testArea.value.length;
console.info(textEnteredLength);
}
testArea.addEventListener("keypress", openDropDown, false);
и вот моя ошибка:
TypeError: testArea is null[Learn More]
Я не понимаю, почему testArea кажется нулевым, поскольку я определил его в первой строке.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны добавить идентификатор card-content в тег input следующим образом:
const testArea = document.querySelector("#card-content");
function openDropDown() {
let textEnteredLength = testArea.value.length;
console.info(textEnteredLength);
}
testArea.addEventListener("keypress", openDropDown, false);<section class = "hero is-info">
<div class = "hero-body">
<div class = "container">
<div class = "card">
<div class = "card-content">
<div class = "content">
<div class = "control has-icons-left has-icons-right">
<input id = "card-content" class = "input is-large" type = "search" placeholder = "" /><span class = "icon is-medium is-left"><i class = "fa fa-search"></i></span><span class = "icon is-medium is-right"><i class = "fa fa-empire"></i></span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>Вам понадобится id, чтобы выбрать элемент DOM для добавления прослушивателя событий.
<section class = "hero is-info">
<div class = "hero-body">
<div class = "container">
<div class = "card">
<div class = "card-content">
<div class = "content">
<div class = "control has-icons-left has-icons-right">
<input class = "input is-large" id = "card-content" type = "search" placeholder = "" /><span class = "icon is-medium is-left"><i class = "fa fa-search"></i></span><span class = "icon is-medium is-right"><i class = "fa fa-empire"></i></span>
</div>
</div>
</div>
</div>
</div>
<script>
const testArea = document.getElementById("card-content");//selects element with id 'card-content'
function openDropDown(){
let textEnteredLength = testArea.value.length;
console.info(textEnteredLength);
}
testArea.addEventListener("keypress", openDropDown, false);
</script>Вы также можете выбрать элемент по его классу (классам).
<section class = "hero is-info">
<div class = "hero-body">
<div class = "container">
<div class = "card">
<div class = "card-content">
<div class = "content">
<div class = "control has-icons-left has-icons-right">
<input class = "input is-large" type = "search" placeholder = "" /><span class = "icon is-medium is-left"><i class = "fa fa-search"></i></span><span class = "icon is-medium is-right"><i class = "fa fa-empire"></i></span>
</div>
</div>
</div>
</div>
</div>
<script>
const testArea = document.querySelector("input.input.is-large");
//selects first input element with class of input and is-large
function openDropDown(){
let textEnteredLength = testArea.value.length;
console.info(textEnteredLength);
}
testArea.addEventListener("keypress", openDropDown, false);
</script>Я обновил html и js соответственно, и проблема не исчезла. TypeError: testArea is null
@akalogiros Не могли бы вы поместить свой код в JSFiddle для меня?
@akalogiros Проблема, вероятно, в том, что ваш script работает до того, как DOM будет готов. Поместите ваш script после элементов DOM, и он должен работать: jsfiddle.net/8n0Lsxtd
Вы также можете использовать атрибут onkeyup и вызвать функцию openDropDown() и передать this в качестве аргумента для доступа к элементу input, чтобы проверить количество символов, введенных в поле ввода.
function openDropDown(input){
console.info(input.value.length)
} <section class = "hero is-info">
<div class = "hero-body">
<div class = "container">
<div class = "card">
<div class = "card-content">
<div class = "content">
<div class = "control has-icons-left has-icons-right">
<input class = "input is-large" type = "search" placeholder = "" onkeyup = "openDropDown(this)" /><span class = "icon is-medium is-left"><i class = "fa fa-search"></i></span><span class = "icon is-medium is-right"><i class = "fa fa-empire"></i></span>
</div>
</div>
</div>
</div>
</div>
@akalogiros вы можете проверить приведенный выше код в ответ и запустить его. он работает, как ожидалось. (возможно, вы забыли обновить
querySelector, чтобы передать#card-content, а неcard-content)