DOM-элементы. События. Ввод.
JavaScript простым языком
Last updated
Was this helpful?
JavaScript простым языком
Last updated
Was this helpful?
Ты даже не представляешь, как много всего происходит в браузере, когда ты производишь какие-то действия: кликаешь ли мышкой, причём браузер различает, правой и/или левой мышью ты кликнул, отслеживает поведение колесика твоей мышки (представляешь?), отслеживает над каким элементом ты сейчас водишь мышкой и т.д и т.п.
Поэтому в этом уроке я хочу начать разбирать тему событий
.
Давай разберем событие клика по кнопке. Создаем html-страницу, на которой будет текст и 2 кнопки:
Код этой страницы:
Итак, что мы здесь имеем? Мы имеем тэг p
с id="text"
и 2 кнопки: одна с id="btnRed"
, а другая с id="btnGreen"
. При нажатии на кнопку, текст в тэге p
должен перекрашиваться в соответствующий цвет, который указан на кнопке.
Что нам необходимо? Нам необходимо с помощью JavaScript получить 3 элемента для управления и обработки событий: тэг p
, и 2 тэга button
. Пишем в файле script.js
свой JS-код:
Так что мы сделали? Правильно, мы с помощью JavaScript нашли требуемые нам элементы и теперь можем с ними работать. А что произойдет, если ты не разместил элемент на странице или ошибся с указанием id
? В значение переменной JavaScript запишет значение null
. Поэтому будь внимательным.
Что нам необходимо сделать дальше? Дальше нам необходимо как-то объяснить браузеру, что мы хотим выполнить некоторые действия при нажатии на кнопки. Два самых популярных способа сделать это средствами JavaScript: использовать метод onclick
у элемента button
, либо использовать метод addEventListener
.
К коду:
Сначала о том, что здесь происходит. Как только произойдет клик по кнопке с id="btnRed"
, выполнится код, находящийся внутри указанной функции, т.е.:
У элемента с id="text"
поменяется цвет текста на красный и появится сообщение, которое сообщит об этом пользователю.
Метод onclick
вызывается непосредственно у того элемента, событие которого мы хотим обрабатывать. В данном случае, мы обрабатываем событие клика у элемента btnRed
. Синтаксис достаточно простой. Все, что нужно – это определить метод onclick
, т.е. задать функцию, которая будет выполняться в том случае, если на элемент, в данном случае, кнопку btnRed
кликнут мышкой (замечу, что onclick
отработает только при клике по элементу левой кнопкой мыши).
В данном случае, мы указали стандартную функцию, но можно указать и стрелочную:
Все будет работать точно так же. Какой вариант лучше? Т.к. я больше пользуюсь возможностями ES6
, то и пишу я в таких случаях чаще всего стрелочную функцию
, т.е. мой выбор – 2 вариант. Аналогично этому обработчику события ты должен создать еще один такой же обработчик, но для другой кнопки. По коду изменится только цвет, который ты хочешь выставить. Итого, файл script.js
должен иметь примерно следующий вид:
Я намерено использовал разные методы для обработки события click
, чтобы показать оба.
Кроме метода onclick
очень часто для обработки тех же кликов можно увидеть следующую конструкцию, которая работает ровно так же:
Синтаксис также очень похож на предыдущий метод, за исключением того, что в onclick
мы записываем конкретную функцию, которая вызовется при отработке события click
, а здесь мы передаем внутрь метода 2 аргумента addEventListenner
: название события, которое мы хотим слушать у элемента и функцию, которая выполнится, когда данное событие произойдет. Здесь также можно использовать стандартную функцию, описание которой начинается с ключевого слова function
, либо, снова используем стрелочную функцию, как я и сделал в данном примере.
Разница на самом деле в том, что addEventListener
более универсальный метод, который может принимать в качестве аргумента огромный список событий (посмотреть все события можно здесь). Т.е., этот метод общий для нескольких десятков событий.
Метод onclick
– обрабатывает только клик по кнопке и больше ничего.
Хочу чтобы ты обратил внимание на то, что сокращенная запись событий есть не только у клика (onclick
), но и практически у всех других событий, которые может отдавать элемент.
Просто ради того, чтобы зацепить побольше пройденных тем, я хочу улучшить тот код, который у нас получился ранее.
Во-первых, обрати внимание на то, как ты получаешь элементы.
Чем отличаются эти 3 строки? Правильно, только названием переменных и id, которые мы передаем в метод getElementById
. Не кажется ли тебе, что эти строки слишком длинные для того чтобы их повторять? Давай улучшим это. Для этого добавим свою функцию getElement
:
Надеюсь, ты понимаешь, что делает эта функция. Если нет, я повторю: функция принимает как аргумент id
элемента, который ты хочешь найти в документе и возвращает тебе значение, которое возвращает метод getElementById
. Теперь наш переработанный код будет выглядеть так:
Как видишь, теперь запись стала короче, но, при этом смысл абсолютно не поменялся. Более того, если вдруг, ты решишь поменять поведение процесса выбора элемента, то тебе не нужно будет исправлять это во всем коде, а лишь поправить только в функции getElement
и во всех остальных частях кода это автоматически применится. Круто, не правда ли?
Внутрь нашей функции getElement
мы передаем id-элемента
, который мы хотим получить. И передаем мы его явной строкой. Но давай подумаем, а удобно ли это? Представь, если у нас в коде будет не как сейчас 20 строк, а хотя бы 300-400, удобно ли будет искать название id
во всем коде? Наверное нет. Поэтому у программистов есть негласное правило – все строковые значения, которые никак не будут меняться походу написания программного кода нужно выносить в отдельные переменные, так называемые константы.
Константы представляют собой обычные переменные, которые инициализируются с помощью ключевого слова const
(неудивительно, да?). Но есть одно отличие от обычных переменных в именовании константы. Ты должен назвать ее с помощью включенного CAPS LOCK
=) Т.е., переменная должна иметь следующий вид:
И в разделении слов используется стиль не camelCase
(когда одно слово заканчивается, а второе начинается с заглавной буквы), а стилем snake case
(когда одно слово в названии переменной разделяется от другого нижним подчеркиванием).
Итак, переведем все наши строковые значения
в константы
. Кроме id элементов у нас это еще и цвета, не забываем и про них. Итого получаем:
В реальных проектах константы определяются в отдельных файлах, либо в самом верху всего листинга кода. В результате этого, в случае изменения названия id
, ты очень быстро найдешь нужную константу и изменишь ее значение. Снова удобство и снова плюс к скорости разработки.
Пойдем еще дальше. Наверное ты заметил, что внутри каждого метода мы устанавливаем цвет текста такой строкой:
Знаешь на что я намекаю? На то, что нужно создать еще одну функцию, которая будет принимать значение цвета и устанавливать его для элемента с id="text"
.
Снова меняем наш код и получаем:
Теперь, когда мы вынесли изменение цвета в отдельную функцию, в случае изменения логики, изменения цвета мы также поменяем эту логику только внутри самой функции.
Даю ссылку на код.
Твоя задача:
полностью разобраться с тем, что там происходит;
добавить свою кнопку и обработать событие клика, которая будет перекрашивать текст в желтый.