Событие onclick в javascript и jquery на примерах
Такое простое событие, как onclick в javascript, может быть вызвано несколькими способами и скрыает некоторые тонкости. Событие происходит при клике по элементу левой кнопкой мыши. Стоит заметить, что при клике происходит так же ещё два события, а именно нажатие на кнопку мыши и её отжатие.
Все примеры будем рассматривать на теге «a» (ссылку). Пусть это не смущает, с другими тегами будет работать аналогичным образом.
Самый простой способ повесить событие onclick, это прописать его непосредственно в html теге:
<a href="#" onclick="alert('Пример 1 сработал'); return false;">Пример 1</a>
Код в действии:
В примере при нажатии на ссылку появляется всплывающее окно с сообщением. Дополнительно к действию мы прописали «return false;». Это требуется чтобы предотвратить переход по ссылке после срабатывания события «onclick». В других элементах (где нет аттрибута href) это можно опустить.
Рассмотренный вариант можно использовать если событие содержит мало кода. Иначе, следует обратить внимание на другие способы.
Выносим код события onclick в javascript-функцию
Следующий способ хорош тем, что мы отделяем javascript-код от html тегов. В теге прописываем название функции, а саму функцию выносим в отдельный блок:
<script> function ChangeColor(Element) { if (Element.style.color == 'green') Element.style.color = 'red'; else Element.style.color = 'green'; return false; } </script> <a href="#" style="color: green;" onclick="return ChangeColor(this);">Изменить цвет</a>
Код в действии:
Но и здесь всё не идеально. Что делать, если событие требуется повесить на все ссылыки сайта, а их сотни? Кажется что это трудно, а на деле — меньше десяти строк кода. Задача решается с помощью селекторов. В примере опять будем производить действия с тегом «a», но ничего не мешает использовать вместо ссылки «img» или «div».
Вешаем onclick на элемент из javascript-кода
Рассмотим еще один способ, на мой взгляд, самый практичный и надежный. Хорош он тем, что событие можно повесить на множество элементов. Для этого требуется выбрать при помощи javascript-селекторов элементы, к которым требуется применить событие onclick.
<script> //дожидаемся полной загрузки страницы window.onload = function () { //получаем идентификатор элемента var a = document.getElementById('switch'); //вешаем на него событие a.onclick = function() { //производим какие-то действия if (this.innerHTML=='On') this.innerHTML = 'Off'; else this.innerHTML = 'On'; //предотвращаем переход по ссылке href return false; } } </script> <a id="switch" href="#">On</a>
Код в действии:
Выбору элементов по селекторам можно посвятить отдельную тему, могу сказать только то, что согласно новой спецификации HTML5, их выбор стал прост и в javascript. Если Вы знакомы с jquery или CSS, то выбрать нужные элементы для Вас не составит труда. Например, так просто можно выбрать все элементы с классом «link» и повесить на них нужное действие:
//выбираем нужные элементы var a = document.querySelectorAll('.link'); //перебираем все найденные элементы и вешаем на них события [].forEach.call( a, function(el) { //вешаем событие el.onclick = function(e) { //производим действия } });
Применяем jQuery
Если в проекте используется библиотека jQuery, то можно ещё упростить код. Рассмотрим два самых распространенных способа:
$(function(){ $(".link").click(function() { //действия }); });
И ещё один вариант, который идентичен предыдущему.
$(function(){ $(".link").on("click", function(){ //действия }); });
С обработчиком «on()» лучше ознакомиться отдельно, так как он несет в себе много полезного функционала. Например, возможность указать через пробел несколько событий к которым будет применяться действие, делегировать события на дочерние элементы, а так же он полезен если необходимо повесить событие на динамически добавляемые элементы, которых изначально нет на странице.
не работал bind. а эллемент из подгружаемого шаблона,,,, как так!!! думал я, что за фигня такая. Оказывается через .on() нужно и ровно после innrhtml or append. Но все же вопрос. может лучше в html указывать onclick=«blabla()»??
Согласен что можено повесит событие по классу, но блин читая хтмл не совсем ясно кто что где вызывается и какую далее функцию смотреть, только по id а там искать в js где и как этот id используется. вот такой у меня сложный вопрос.
Есть ссылка на странице1, пользователь кликает по ней в фоновом режиме открывается страница2, этой ссылки, а на странице1 на месте ссылки появляется другой текст.
Делаю скрипт и одна и та же функция вот так работает:
и так тоже работает:
Но вот так эта же функция НЕ работет:
и так тоже НЕ работает:
Как такое может быть?
Я совсем не знаю javascript, но насколько понимаю, для этого у кнопки должен быть указан id? Если у кнопки нет id получится ли как-то назначить событие для определенных кнопок?
Вкратце, объясню зачем мне это: я интернет-маркетолог и у меня есть доступ только к админке modx, в которой я не могу назначить id для кнопок, но теоретически мог бы использовать этот код и вставить его в другую часть кода страницы, чтобы передавать данные о клике на кнопку «Оставить заявку» в систему Яндекс.Метрики для анализа источников, с которых пришли посетители оставившие заявки на сайте.
Но есть вероятность что это событие уже где-то определено, и в нём прописано return false. Тогда второе подобное событие может не сработать и потребуется придумывать другие способы.
Сколько не бьюсь, не могу решить такую проблему: первых два onClick работают нормально — замещая друг друга. Как сделать, что бы все работали также? Для примера привожу выбор из 4, на самом деле мне нужно 10 кнопок. Неужели, нужно прописывать на закрытие все 10?
С уважением, Дед.
Совет, не пиши стили в атрибуте style. Для стилей давно придумали такую замечательную вещь, как CSS.
Второй совет, лучше использовать для твоих целей jquery библиотеку, тогда весь js код уместится строчки в 4. Пример, как это работает, есть в статье.
Но если нужно всё же на чистом javascript, то лучше всем DIV-ам прсвоить один и тот же класс и перед display=block сначала скрывай все элементы с этим классом, а потом уже показывать нужный:
Стили в атрибуте style написал только для примера, они прописаны в файле .css
Будьте здоровы.
дайте код приведения (или сслыку)
Так он не будет работать!
Работакть будет так:
вешаем событие
el.addEventListener('click', function(e) {
//производим действия
});
Примерно, так:
где, .selector-element это селектор элемента, на который навешивается анимация, а animation-class — класс, которому прописана css анимация.
А можно рабочий пример для двух пар ON/OFF и ON/OFF
Т.е. кликаю на первый ON и он меняется на OFF, кликаю на второй и уже меняется он с тем, что бы можно было увеличивать количество неограниченно.
Выдает ошибку «Синтаксическая ошибка» символ 52
на строчке document.querySelectorAll('.switch').forEach(el =>
Проверял в PHP Expert Editor оба варианта не работают.
Проверил на сервере — оба варианта работают.
Так, что извиняюсь за дезинформацию.
Я, вообще то, хочу поставить на свой сайт систему лайков. Посмотрел в Интернете все, что мог найти по такому запросу.
Везде делается упор на PHP и MYSQL, а это я и сам знаю. А вот часть javascript везде невнятно. Теперь на основе Вашего кода пойду дальше.
Еще раз спасибо.
P.S. А может подготовите статью про систему лайков, рассчитанную на таких как я, разбирающихся в PHP, но нулях в javascript?
После return false; вставил
У каждого <a class… д.б. свой номер
Вопрос.
Как в <a class вставить этот номер, а затем донести его до INSERT INTO
есть кнопка
И есть форма
после первого клика на кнопку форма не открывается. только после 2-го. в чем может быть проблема?
В хелпе есть статья о возможности передачи параметров в формы, указываются в но она не подробно написана, мол для разъяснения обращайтесь к партнерам.
А кроме вышеперечисленного, проблема в том что формы на странице 2шт
Подскажите пожалуйста, как прописать.
Есть 2 кнопки выбора товара
И форма для отправки:
Как прописать, чтобы при выборе товара заполнялось автоматически поле в форме name=«comment»?
У меня все получилось!
Но есть еще вопрос.
На главной странице есть форма-1, при заполнении которой и нажав «ЗАКАЗАТЬ СО СКИДКОЙ» перебрасывается на другую страницу сайта, где есть приветствие и обращение по имени, которое заполнено в форме-1, еще одно предложение по выбору товара и форма-2, где автоматически должны повторяться имя и телефон из формы-1.
Эти коды я «спионерила» с другого сайта. Там все работает. На моем нет. Не пойму почему.
Форма-1
Приветствие другой странице сайта:
Форма-2
Попробуй заменить на:
но не работает(
Надеюсь, разберетесь.
Смешно конечно получилось )
Автору респект за статью! нашел как правильно и быстро перебрать множество элементов с одинаковым классом в многоуровневом списке и повесить на них событие.