Показать сообщение отдельно
  #1 (permalink)  
Старый 30.04.2020, 17:10
Новичок на форуме
Отправить личное сообщение для alshanskiy Посмотреть профиль Найти все сообщения от alshanskiy
 
Регистрация: 30.04.2020
Сообщений: 3

Отправка цели в Яндекс Метрику из Формы
Здравствуйте.
На многих моих сайтах сделанных мной, стоят "формы". Они передают данные в телеграм, а так же отправляют копии на почты.
Сама форма и весь код практически взят из урока "Библиотека PHPMailer. Отправка писем средствами AJAX". Я ее немного преобразовал под себя, встроил в опенкарт. Чуть чуть дописал Яваскрипт методами "ОК ГУГЛ". Работает она прекрасно, как мне и требуется. Проверки на заполнения, что бы пробелы не отправлялись, все было хорошо, пока не пришел СЕОшник.
Он сказал, что надо на все настроить цели. Хоп. Мы настроили цели, как по справке яндекса.
Через месяц работы мы выяснили, что:
Целей по форме было 100 штук. А писем пришло только 65 (условные данные.)
И тут я понял, что это происходит из-за нажатия отправки по кнопки SUBMIT
Но ява скрипт при нажатии проверяет корректность формы, и может ее не отправить если не заполнены поля.
Иногда пользователь два - три раза нажимает submit перед тем как форма отправиться.
Я Сам не знаю яваскрипт, не мешало бы мне его выучить, но вопрос такой.
Как правильно вставить момент отправки цели, после всех удачных событий.
Код прилагаю.

<form action="" method="post" id="zakaz-seychas">
    <input type="text" name="myname"    id="myname"     placeholder="Имя *">
    <span></span>
    <input type="text" name="myphone"   id="myphone"    placeholder="Телефон *">
    <span></span>
    <input type="text" name="mymail"    id="mymail"     placeholder="E-mail">
    <span></span>
    <input type="text" name="mycomment" id="mycomment"  placeholder="Сообщение">
    <span></span>
    <button type="submit" name="submit" id="submit" value="ЗАКАЗАТЬ СЕЙЧАС">ЗАКАЗАТЬ СЕЙЧАС</button>
    <span></span>
</form>


<script>
     $(function(){
           $('#zakaz-seychas').submit(function(){
           $('#zakaz-seychas').find('input, textarea').removeClass("danger"); // удаляю класс *обязательно к заполнению
           $('#zakaz-seychas').find('input, textarea').removeClass("succses"); // удаляю класс *успешно заполненно                                   
           var errors = false;
           $(this).find('span').empty(); // очищаем спаны
           $(this).find('input, textarea').not(':input#mymail').each(function(){
                if( $.trim( $(this).val() ) == '' ) {
                     errors = true;
                     $(this).addClass("danger"); // ставим класс *обязательно к заполнению
                }
                else{
                     $(this).addClass("succses"); // ставим класс *успешно заполненно   
                }
           });
             if( !errors ){
                 var data = $('#zakaz-seychas').serialize();
                 $.ajax({
                    url: 'catalog/view/theme/zebra/template/phpmailer/sendform2.php', // могу и этот файл отправить
                    type: 'POST',
                    data: data,
                    beforeSend: function(){
                     	 $('#zakazing').modal('hide') // скрываю модалку с формой
                         $('#sending').modal('show') // запускаю модалку с отправкой формы и прогрессбаром 
                    },
                    success: function(res){
                        if( res == 1 ){
                            $('#zakaz-seychas').find('input, textarea').removeClass("danger");
                            // удаляю класс *обязательно к заполнению
                            $('#zakaz-seychas').find('input, textarea').addClass("succses");
                            // удаляю класс *успешно заполненно 
                            $('#zakaz-seychas').find('input:not(#submit), textarea').val('');
                            // очищаем значения полей при успешной отправки
                            $('#submit').next().empty();
                            // очищаем поясняняющий спан "отправляю"
                            $('#sending').modal('hide'); 
                            // прячу модалку "отправка формы и прогрессбаром"

                            //////////////////////////////////////////////////
                            // ВОТ В ЭТО МЕСТО НУЖНО ВСТАВИТЬ ОТПРАВКУ ЦЕЛИ//
                            //////////////////////////////////////////////////

                            alert('Письмо успешно отправлено');
                            // алерт об успехе
                            $('#zakaz-seychas').find('input, textarea').removeClass("succses"); 
                            // удаляю класс *успешно заполненно     
                        }else{
                            $('#submit').next().empty();
                            alert('Ошибка 1049');
                        }
                    },
                    error: function(){
                        alert('Ошибка 1059!');
                    }
                });
            }
            return false;
         });
     });
</script>


Второй вариант установки кода цели в форму согласно яндекс.справки
<form action="">
    <input type="button" onclick="ym(XXXXXX, 'reachGoal', 'TARGET_NAME'); return true;" value="Заказать" />
</form>

Второй вариант установки кода цели в форму согласно яндекс.справки
<form action="" method="get" onsubmit="ym(XXXXXX, 'reachGoal', 'TARGET_NAME'); return true;">
</form>


в обоих случаях, при многократном нажатии инпута и удачной отправки формы на почту и в ТГ отправляется много целей, вместо одной.

Пожалуйста помогите.
Ответить с цитированием