Кроме `onclick`, существует множество других событий для кнопок (и элементов в целом), которые можно разделить на несколько категорий.
1. Основные события мыши. Эти события срабатывают при взаимодействии с помощью мыши или подобного устройства (например, тачпада).
onmousedown — срабатывает в момент нажатия кнопки мыши на элементе (палец прикоснулся к экрану). Это происходит до onclick.
onmouseup — срабатывает в момент отпускания кнопки мыши на элементе (палец оторвался от экрана). onclick = onmousedown + onmouseup в пределах одного элемента.
onmouseenter / onmouseover — когда указатель мыши заходит на область элемента. onmouseenter не всплывает(1).
onmouseleave / onmouseout — когда указатель мыши покидает область элемента. onmouseleave не всплывает(1).
onmousemove — срабатывает при каждом движении мыши над элементом.
oncontextmenu — срабатывает при попытке открытия контекстного меню (обычно клик правой кнопкой мыши). Полезно для отмены стандартного меню.
ondblclick — двойной клик.
Примечание (1): "событие не всплывает" касается такого понятия, как "всплытие событий". Подробнее см. далее врезку "Всплытие событий".
2. События клавиатуры (актуальны, когда кнопка в фокусе). Часто используются для активации кнопки с клавиатуры (Enter, Space).
onkeydown — клавиша нажата (срабатывает первой, при удержании — повторно).
onkeyup — клавиша отпущена.
onkeypress (устаревшее) — срабатывает при нажатии клавиши, которая генерирует символ (например, буква, цифра). Не рекомендуется к использованию, используйте onkeydown/onkeyup.
3. События фокуса. Кнопка может получать фокус с помощью Tab или клика.
onfocus — элемент получил фокус (например, на него перешли с помощью Tab).
onblur — элемент потерял фокус.
onfocusin / onfocusout — аналоги onfocus/onblur, но события всплывают.
4. События форм (если кнопка внутри < form>).
onsubmit — событие формы, а не кнопки, но срабатывает при отправке формы, которую можно инициировать кнопкой с `type="submit"`.
onreset — аналогично для кнопки сброса формы (`type="reset"`).
5. Универсальные и Touch-события.
onpointerdown, onpointerup, onpointermove и др. — современные универсальные события, которые работают для мыши, пера, тач-интерфейсов.
ontouchstart, ontouchend, ontouchmove — специфичные для сенсорных экранов события.
[Практический пример использования нескольких событий для кнопки]
< button id="myBtn"
onmousedown="console.log('Кнопку нажали')"
onmouseup="console.log('Кнопку отпустили')"
onmouseenter="console.log('Мышь на кнопке')"
onmouseleave="console.log('Мышь ушла')"
onfocus="console.log('Кнопка в фокусе')"
onblur="console.log('Кнопка не в фокусе')"
onkeydown="(event) => { if(event.code === 'Space') console.log('Нажат пробел на кнопке'); }">
Нажми меня
< /button>
< script>
// Более современный и рекомендуемый способ через addEventListener
document.getElementById('myBtn').addEventListener('click', function(event) {
console.log('Клик обработан через addEventListener!'); });
< /script>
Важное замечание по использованию:
Сейчас рекомендуется использовать не атрибуты HTML (onclick="..."), а метод addEventListener. Это позволяет:
- Добавлять несколько обработчиков на одно событие.
- Легче управлять кодом.
- Использовать возможности фазинга и всплытия событий.
- Разделять структуру (HTML) и логику (JavaScript).
const button = document.querySelector('#myBtn');
button.addEventListener('click', handler1);
button.addEventListener('click', handler2);
button.addEventListener('mouseenter', () => console.log('Мышь над кнопкой'));
function handler1() { /* ... */ }
function handler2() { /* ... */ }
Итог: самые часто используемые для кнопок события, помимо onclick — это onmousedown/onmouseup (для тонкого контроля), `onmouseenter`/onmouseleave (для визуальных эффектов) и события клавиатуры (onkeydown), чтобы сделать кнопку доступной.