Как добавить onclick к кнопке или ссылке через JS?
Здравствуйте, может кто знает, как добавить произвольное событие onclick к определенным ссылкам на сайте (по шаблону или маске)?
Чтобы после загрузки страницы сразу же этот onclick был в коде и его можно было увидеть через исходный код? То есть фактически заменить код <a href="tel://999">999</a> <a href="tel://888">888</a> <a href="https://newurl.ru">Скачать прайс</a> чтобы после генерации страницы он выглядел так: <a href="tel://999" onclick="ym(777,'reachGoal','ppp'); return true;">999</a> <a href="tel://888" onclick="ym(777,'reachGoal','ppp'); return true;">888</a> <a href="https://newurl.ru" onclick="ym(777,'reachGoal','ppp'); return true;">Скачать прайс</a> Никогда толком с JS не работал, облазил всякие мануалы и вопросы, но не нашел нигде какого-то решения. |
moytop,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> document.addEventListener('DOMContentLoaded', function() { let words = 'tel:|newurl.ru'.split('|'); let onclick = "ym(777,'reachGoal','ppp'); return true;"; let cls = words.map(a => `[href*="${a}"]`); document.querySelectorAll(cls).forEach(elem => elem.setAttribute('onclick', onclick)); }); </script> </head> <body> <a href="tel://999">999</a> <a href="tel://888">888</a> <a href="https://newurl.ru">Скачать прайс</a> </body> </html> |
Спасибо большое, всё работает, но вторую неделю уже пытаюсь понять как. Просто для того, чтобы иметь гибкость, и например, добавить
let onsubmit = "ym(777,'reachGoal','ppp'); return true;"; в форму типа: <form action="#" method="post"> <input name="lead_name" type="text" placeholder="Введите ваше имя"> <input name="lead_email" type="text" placeholder="Введите ваш e-mail"> <input type="submit" value="Отправить"> </form> чтобы получилось: <form action="#" method="post" onsubmit = "ym(777,'reachGoal','ppp'); return true;"> Может вас не затруднит хотя бы в общих чертах описать суть кода, особенно let cls = words.map(a => `[href*="${a}"]`); и document.querySelectorAll(cls).forEach(elem => elem.setAttribute('onclick', onclick)); По какому принципу он ищет? когда смотрю документацию, то вижу там только .querySelectorAll - мол это по селекторам поиск. А тут ведь работает не по селекторам, а разбирает html код и конкретные ссылки. Был бы признателен за любую помощь, чтобы научиться хотя бы минимуму: добавлять любое событие в любую строчку сайта (будь то ссылка, кнопка или форма), может есть ссылки на какие-то правильные документации. Или в целом чтобы можно было понять суть и базовый принцип, что менять в коде, если это кнопка или форма? |
Цитата:
Цитата:
|
moytop,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> document.addEventListener('DOMContentLoaded', function() { let onsubmit = "ym(777,'reachGoal','ppp'); return true;"; document.querySelectorAll('[method="post"]').forEach(elem => elem.setAttribute('onsubmit', onsubmit)); }); </script> </head> <body> <form action="#" method="post"> <input name="lead_name" type="text" placeholder="Введите ваше имя"> <input name="lead_email" type="text" placeholder="Введите ваш e-mail"> <input type="submit" value="Отправить"> </form> </body> </html> |
moytop,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
А если уже есть onsubmit в форме? Тогда код не срабатывает...
Вот например сайт https://fiorino-travel.by/ Там onsubmit в формах стоит - скрин https://disk.yandex.com/i/mUaHp-biAPDSFQ И если добавляю: <script> document.addEventListener('DOMContentLoaded', function() { let onsubmit = "ym(90691922,'reachGoal','ppp'); return true;"; document.querySelectorAll('[method="post"]').forEach(elem => elem.setAttribute('onsubmit', onsubmit)); }); </script> то уже не работает |
moytop,
вероятно вашей формы нет на странице после загрузки, что эту форму создаёт, туда и нужно добавить код смены атрибута. |
Часовой пояс GMT +3, время: 11:09. |