Sc0undRel
@Sc0undRel

Где ошибка в Javascript?

Посмотрите вывод консоли с отображением выполняемых событий в Яндекс.Метрике https://karedesign.ee/ru/product/box-zebra?_ym_debug=1

Если нажать "В корзину" и нажать на кнопку "Продолжить", то запускается обработчик события:
$("#telefon-submit").click(function(event){

Далее происходит проверка введённых данных:
if(/^(?=.*[0-9])[0-9 \(\)\+-]+$/i.test(document.getElementById('phone').value))
 submitForm();
else
 $("#phone").css("border", "2px solid red");


Если в поле ничего не вводить или ввести цифры, то почему одновременно срабатывают оба условия TRUE и False?
То есть и submitForm(); срабатывает и Yandex Metrika получает событие
yaCounter45870459.reachGoal('add-telefon');
и одновременно поля выделяются красным?
$("#phone").css("border", "2px solid red");

Вот кусок кода, о котором идет речь:
<script>
        $("#telefon-submit").click(function(event){
             // cancels the form submission
             event.preventDefault();
             if(/^(?=.*[0-9])[0-9 \(\)\+-]+$/i.test(document.getElementById('phone').value))
                submitForm();
             else
                $("#phone").css("border", "2px solid red");
        });
        function submitForm(){
             // Переменные с данными из формы
             var phone = $("#phone").val();

             $.ajax({
             type: "POST",
             url: "sendmail.php",
             data: "phone="+ phone + "&product="+ location.href,
             success : function(text){
             if(text == "success"){
             formSuccess();
             }
             }
             });
        }
        function formSuccess(){
             yaCounter45870459.reachGoal('add-telefon'); //Yandex Metrika
        }
        </script>
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Конечно, поскольку /^(?=.*)/ находит любое начало строки, что бы за ним не следовало.
Если сделать /^(?=.+)/ - пустое значение уже не отловится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AnneSmith
самая ленивая
так через sources в dev tools поставьте брейкпойнт в начале функции и посмотрите по шагам как и что считается, в хроме удобнее всего

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

слёту не разберусь в вашем регексе, он проверяет на пустое поле?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы