Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29

Вызов нескольких функций при onclick

07.07.2016, 14:07. Показов 4830. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, в магазину нужно повесить события на кнопку "Купить":

из Яндекс Метрики -
JavaScript
1
onClick="yaCounter37933950.reachGoal('buy_button')";
из Google Analytics -
JavaScript
1
onClick="ga('send', 'event', 'buy_button', 'click');"
Магазин на ImageCMS Shop. В кнопку уже встроены события
JavaScript
1
onclick='Shop.Cart.add($(this).closest("form").serialize(), "{echo $productVariant->getId()}")'
Как синтаксически правильно расставить эти события в одной кнопке? Пробовал по-всякому: то метрики не срабатывают, то "Купить" не работает.

Заранее очень спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2016, 14:07
Ответы с готовыми решениями:

Вызов нескольких методов onclick
Сразу скажу, не особый спец в JS, не знаю многих азов, но нужно быстро решить задачу: Есть текстовые формы, при нажатии на кнопку эти...

Вызов нескольких функций
Вот у меня такой вопрос. Писал на ассемблере бегущий огонек. И решил переделать и сделать так. Запускаешь и сразу бегает огонек, нажал на...

Connect, вызов нескольких функций
Привет. Есть обычный сonnect. При нажатии на кнопку мне нужно вызвать более одной функции. Как правильно это сделать? писать несколько...

12
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.07.2016, 14:28
foxytrail, тут 2 пути
через addListener/JQuery.on
и написание функции, в которой по очереди будут вызываться события
2-ой вариант:
HTML5
1
2
3
4
5
6
7
<script>
function call_chain(obj) {
    Shop.Cart.add($(obj).closest("form").serialize(), "{echo $productVariant->getId()}");
    ga('send', 'event', 'buy_button', 'click');
    yaCounter37933950.reachGoal('buy_button');
}
</script>
в onClick прописать
JavaScript
1
onClick='call_chain(this);'
вроде не напутал...
1
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 15:30  [ТС]
Cra3y, спасибо!

Для первого способа не созрел еще. А по второму - при вставке <script>, страница выдает ошибку.
В доках по метрике, есть еще один способ - подвесить щелчок события на открытие окна. А при нажатии кнопки "Купить", как раз всплывает окно.

Если я выложу файлы .tpl , которые выводят страницы с: товаром и всплывающим окном. У Вас будет время/желание помочь в пределах этой темы?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.07.2016, 15:34
Цитата Сообщение от foxytrail Посмотреть сообщение
У Вас будет время/желание помочь в пределах этой темы?
могу попробовать.

Добавлено через 1 минуту
Цитата Сообщение от foxytrail Посмотреть сообщение
А по второму - при вставке <script>, страница выдает ошибку.
только ошибку огласите.
1
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 16:07  [ТС]
Спасибо!

Цитата Сообщение от Cra3y Посмотреть сообщение
только ошибку огласите.
в выводе шаблона, как понимаю - Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) or '$' in .../.../templates_c/87ee9ff0ab59781dacc38cd555273821.php on line 52


Последовательность действий:

1. В файл вывод главной страницы main.tpl , в <head> вставил скрипт (ближе к концу кода)

Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<head>
        <meta charset="utf-8" />
        <title>{$site_title}</title>
        <meta name="description" content="{$site_description}" />
        <meta name="keywords" content="{$site_keywords}" />
        <meta name="generator" content="ImageCMS" />
        <meta name = "format-detection" content = "telephone=no" />
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" />
        <link rel="stylesheet" type="text/css" href="{$THEME}css/style.css" media="all" />
        <link rel="stylesheet" type="text/css" href="{$THEME}{$colorScheme}/colorscheme.css" media="all" />
        <link rel="stylesheet" type="text/css" href="{$THEME}{$colorScheme}/color.css" media="all" />
        <link rel="stylesheet" type="text/css" href="{$THEME}css/adaptive.css" media="all" />
        <link rel="stylesheet" type="text/css" href="{$THEME}js/fancybox/jquery.fancybox-1.3.4.css" media="all" />
 
        {if $CI->uri->segment(1) == MY_Controller::getCurrentLocale()}
            {$lang = '/' . \MY_Controller::getCurrentLocale()}
        {else:}
            {$lang = ''}
        {/if}
        {if $CI->uri->segment(2) == 'profile' || $CI->uri->segment(1) == 'wishlist'}
            <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW" />
        {/if}
        <script type="text/javascript">
            var locale = "{echo $lang}";
        </script>
        <script type="text/javascript" src="{$THEME}js/jquery-1.8.3.min.js"></script>
        {include_tpl('config.js')}
        <script type="text/javascript" src="{$THEME}js/settings.js"></script>
        <!--[if lte IE 9]><script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
        <!--[if lte IE 8]><link rel="stylesheet" type="text/css" href="{$THEME}css/lte_ie_8.css" /><![endif]-->
        <!--[if IE 7]>
            <link rel="stylesheet" type="text/css" href="{$THEME}css/ie_7.css" />
            <script src="{$THEME}js/localStorageJSON.js"></script>
            <![endif]-->
                
          <script src="https://use.fontawesome.com/b18d1c2743.js"></script>
          
          <script>
            function call_chain(obj) {
                 Shop.Cart.add($(obj).closest("form").serialize(), "{echo $productVariant->getId()}");
                 ga('send', 'event', 'buy_button', 'click');
                 yaCounter37933950.reachGoal('buy_button');
            }
            </script>
 
        <link rel="icon" href="{echo siteinfo('siteinfo_favicon_url')}" type="image/x-icon" />
        <link rel="shortcut icon" href="{echo siteinfo('siteinfo_favicon_url')}" type="image/x-icon" />
    </head>


2. Затем в файл product.tpl поместил onclick, 248-я строка

Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<div class="btn-buy-p btn-buy{if $inCart} d_n{/if}">
                                                                    <button
                                                                        type="button"
 
                                                                        onClick='call_chain(this);'
                                                                                                
                                                                        class="btnBuy infoBut"
 
                                                                        data-id="{echo $productVariant->getId()}"
                                                                        data-vname="{echo ShopCore::encode($productVariant->getName())}"
                                                                        data-number="{echo $productVariant->getNumber()}"
                                                                        data-price="{echo $productVariant->toCurrency('Price',null,true)}"
                                                                        data-add-price="{if $NextCSIdCond}{echo $productVariant->toCurrency('Price',$NextCSId,true)}{/if}"
                                                                        data-orig-price="{if $hasDiscounts}{echo $productVariant->toCurrency('OrigPrice',null,true)}{/if}"
                                                                        data-large-image="
                                                                        {if preg_match('/nophoto/', $productVariant->getlargePhoto()) > 0}
                                                                            {echo $model->firstVariant->getlargePhoto()}
                                                                        {else:}
                                                                            {echo $productVariant->getlargePhoto()}
                                                                        {/if}"
                                                                        data-main-image="
                                                                        {if preg_match('/nophoto/', $productVariant->getMainPhoto()) > 0}
                                                                            {echo $model->firstVariant->getMainPhoto()}
                                                                        {else:}
                                                                            {echo $productVariant->getMainPhoto()}
                                                                        {/if}"
                                                                        data-img="
                                                                        {if preg_match('/nophoto/', $productVariant->getSmallPhoto()) > 0}
                                                                            {echo $model->firstVariant->getSmallPhoto()}
                                                                        {else:}
                                                                            {echo $productVariant->getSmallPhoto()}
                                                                        {/if}"
                                                                        data-maxcount="{echo $productVariant->getstock()}"
                                                                        >
                                                                        <span class="icon_cleaner icon_cleaner_buy"></span>
                                                                        <span class="text-el">{lang('Купить', 'fullMarket')}</span>
                                                                    </button>
                                                                </div>

Выдает вышеописанную ошибку.

Сейчас на сайте оригинальные файлы, без этих правок, чтобы работал. Сайт - pushka-shop.com.ua

PS. под спойлерами части кода, непосредственно относящиеся к предмету обсуждения
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.07.2016, 16:22
foxytrail, в папке с темой найдите папку js и там создайте файл call_chain.js с содержимым
JavaScript
1
2
3
4
5
function call_chain(obj, id) {
    Shop.Cart.add($(obj).closest("form").serialize(), id);
    ga('send', 'event', 'buy_button', 'click');
    yaCounter37933950.reachGoal('buy_button');
}
старый блок script с этой функцией в main.tpl замените на
HTML5
1
<script type="text/javascript" src="{$THEME}js/call_chain.js"></script>
в product.tpl замените onclick на
HTML5
1
onClick='call_chain(this, "{echo $productVariant->getId()}");'
Думаю, это поможет.
1
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 18:58  [ТС]
Ошибку не выбивает, в коде страницы выводится, но не срабатывает главное событие "купить".

Есть еще второй способ.

При нажатии кнопки купить "Купить", всплывает окно. Файл tpl этого окна тоже есть - cart_popup.tpl

В Яндекс метрике есть способ поставить событие на открывающееся окно - скриншот , ссылка на Яндекс-помощь.
Однако, я поочередно вставлял скрипты, как указывает Яндекс, в файл cart_popup.tpl . Результат - окно перестает всплывать.

Что подскажете, как поступить? Добивать первый способ или попробовать с всплывающим окном?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
07.07.2016, 19:18
Лучший ответ Сообщение было отмечено foxytrail как решение

Решение

я конечно же извиняюсь, но в данном случае можно обойтись и стандартным inline методом, потому как изначально все этим метрики уже посылают правильности написания кода и так далее

JavaScript
1
onclick='Shop.Cart.add($(this).closest("form").serialize(), "{echo $productVariant->getId()}");ga("send", "event", "buy_button", "click");yaCounter37933950.reachGoal("buy_button")'
но для js'ников это не правильно, в данном случае может и сработать
2
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 19:40  [ТС]
BANO, спасибо за помощь, вот при таком синтаксисе работает!

Cra3y, спасибо за помощь! Вы вдохновили меня на изучение основ JS!
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.07.2016, 19:53
foxytrail, если есть желание, можно попробовать подправить функцию
JavaScript
1
2
3
4
5
6
function call_chain(obj, id) {
                       // запрос кнопки с атрибутом data-id == id
    Shop.Cart.add($('button[data-id=' + id + ']').closest("form").serialize(), id);
    ga('send', 'event', 'buy_button', 'click');
    yaCounter37933950.reachGoal('buy_button');
}
Остальное, как в последнем варианте

Не по теме:

шаблон с дропбокса я скачать не смог - dropBox зарегаться потребовал =\
P.S.: я сам нуб в js :D

1
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 19:57  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
шаблон с дропбокса я скачать не смог - dropBox зарегаться потребовал =\
там достаточно просто закрыть всплывающее окно с формой регистрации

Спасибо. Ближе к ночи попробую подправить функцию. А то сейчас ругаются на экспериментами в рабочее, так сказать, время )
0
07.07.2016, 20:00

Не по теме:

Цитата Сообщение от foxytrail Посмотреть сообщение
А то сейчас ругаются на экспериментами в рабочее, так сказать, время )
На рабочем коде тестировать - зло.
для тестов виртуалку поднять надо бы, это же не проблема(но это отдельная тема)

0
 Аватар для foxytrail
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 29
07.07.2016, 23:47  [ТС]
Cra3y, прошу прощения, оказался очень невнимательным... Перед тестированием способа в посте 6, не перекинул call_chain.js на хостинг. Сейчас опять попробовал - все выводит. Спасибо!

Будем тестировать с директологом оба способа и посмотрим, какой лучше подойдет.

Ребята, еще раз огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2016, 23:47
Помогаю со студенческими работами здесь

Вызов нескольких функций в цикле по имени
Хочу сделать в цикле запрос функций в стиле NumberLayers = 4 for i = 1, NumberLayers do //Какой-то повторяемый код ...

Вызов программы при помощи функций в Delphi
Помогите пожалуйста, возможен ли вызов другой программы при помощи функций в Delphi? По диплому мне нужно вставить свой модуль для...

Дублированный вызов функций при роутинге и Signal R
Привет, есть такая связка .NET Core + Vue и Signal R (Пакет для Vue от @latelier/vue-signalr обертка над пакетом @aspnet/signalr) Хочу...

Вызов функции OnClick()
Приветствую. Есть объект, у него есть атрибут 'onclick', выглядит примерно так: &lt;table onclick=&quot;Open(this)&quot;&lt;/table&gt; ...

Шаблоны функций при компиляции нескольких файлов
Добрый день, форумчане! Ситуация следующая: есть проект на VS2015. В сторонней от него папке лежит два файла queue.h и queue.cpp. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru