JavaScript, как повесть две функции на onclick?

195
05 апреля 2018, 13:57

Здравствуйте!

Есть кнопка, в которой событие onclick:

<input type="submit" value="Заказать звонок"  onclick="yaCounterXXXXXX.reachGoal('4'); return true;">

Мне нужно, что было не только:

yaCounterXXXXXX.reachGoal('4'); return true;

а ещё:

dataLayer.push({"event": "zayavka_obratnyiy_zvonok"});

Подскажите как это сделать. Спасибо.

Answer 1
<script>
  // Объявляем функцию обработки события клика (имя функции произвольное)
  function onSubmitBtnClick() {
    yaCounterXXXXXX.reachGoal('4'); 
    dataLayer.push({"event": "zayavka_obratnyiy_zvonok"});
    return true; 
  }
  // При событии "содержимое DOM загружено", еще до полной загрузки страницы, мы уже можем работать с элементами
  // Тут в качестве обработчика добавляется анонимная стрелочная функция: () => {}
  document.addEventListener('DOMContentLoaded', () => {
    let submit = document.querySelector('input[type="submit"]');  // выбираем элемент. Селектор чисто для примера - в реальном коде лучше использовать более конкретный (а еще лучше, кнопки выбирать по id)
    submit.addEventListener('click', onSubmitBtnClick);  // добавляем элементу наш обработчик события "click" - указываем имя функции
  }); 
</script>

Впоследствии можно добавить еще обработчики, через тот же метод addEventListener. Тогда, переменную указывающую на элемент, лучше объявить глобально.
А назначать обработчики событий инлайн (в атрибутах on<eventname>) - не самая хорошая практика: помимо головной боли с навешиванием нескольких обработчиков, это порождает еще и лишние сложности с контекстом и this... что в некоторых случаях вынуждает делать лишние обращения к DOM, или даже костылить те вещи, которые иначе (при назначении методом) решились бы проще и эффективнее.

Answer 2

Выполнить две функции подряд

function f1() { 
    console.log("выполнение функции 1") 
} 
 
function f2() { 
    console.log("выполнение функции 2") 
}
<div onclick="f1(); f2();"  style="width: 100px; height: 25px; background-color: #777777; border-radius: 10px;text-align:center;padding-top:3px;cursor:pointer;" >кнопка</div>

READ ALSO
Обновить данные на панели

Обновить данные на панели

Как перезагрузить панель не перезагружая страницу? Мне просто нужно обновлять данные по кликуПробовал

198
Подсчет динамических полей во Vue js

Подсчет динамических полей во Vue js

Есть поля формы, которые создаются динамическиНужно расчитать 5 поле()Стоимость по формуле: width * len * height

240
Как сделать загрузку фото на сервер? Node.js + Ajax

Как сделать загрузку фото на сервер? Node.js + Ajax

Пытаюсь реализовать загрузку изображения на сервер, но файл не загружаетсяПомогите исправить ошибку

310
Система линейных уравнений JavaScript [требует правки]

Система линейных уравнений JavaScript [требует правки]

Написать скрипт который решает систему линейных уравнений (должна быть реализованы подпрограммы вычисления определителя и алгебраического...

214