Отложенный submit формы на jquery

Тема в разделе "JavaScript", создана пользователем verfaa, 7 июн 2015.

Модераторы: ZiX
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    Есть форма логина
    Код:
    <form name="authForm" method="POST" id="auth" action="auth.php">
    <input type="text" id="login_pole1" value="" name="login" />
    <input type="password" id="login_pole2" value="" name="pass" />
    <input type="submit" class="medium" value="Go!" />
    </form>
    
    Нужно написать скрипт на jquery, который при сабмите формы отправлял ajax запрос и в зависимости от ответа отправлял или не отправлял форму. Пытаюсь использовать для этих целей e.preventDefault(); но он отказывается работать, вот так выглядит мой скрипт.

    Код:
        
    $('form[name=authForm]').bind('submit', function(e) {
            var login_lg = $('#login_pole1').val();
    
            if(login_lg.match(/^\+?\d{8,14}$/)){ // Если передан номер мобильного телефона
    
                $.ajax("/ajax/val_phone.php", {
                    cache: false,
                    data: {
                        "phone_num": login_lg
                    },
                    dataType: "json",
                    success: function(fdt){
    
                        // Номер телефона не подтвержден - предотвращаем сабмит формы и выводим алерт
                        if(fdt.otvet == 0){
                            e.preventDefault(); // Не работает когда условие выполняется.
                            alert("phone not confirmed");
                        }
                    },
                    error: function(){ alert('ajax error...'); },
                    type: "GET",
                    proccessData: false
                });
            }
        });
    
    // Если e.preventDefault(); выше не сработал форма сабмитится и обрабатываем данные ...
    
     
  2. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.386
    Симпатии:
    575
    Посмотрите пожалуйста.
    http://jsfiddle.net/zixdev/ycz93vLk/
    ok = 1 успешный ajax, false это неуспешно.
    Можно ещё $('form').off('submit');
    для того чтоб отрубить форму.
     
    verfaa нравится это.
  3. redwert

    redwert Постоялец

    Регистр.:
    11 фев 2014
    Сообщения:
    62
    Симпатии:
    19
    а что выводится в консоли, перед
    e.preventDefault();
    дописать console.log(e);
     
  4. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.386
    Симпатии:
    575
    всегда и у всех одно и тоже.
     
  5. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    643
    Симпатии:
    369
    Код:
    e.preventDefault();
    вставьте в самый верх функции, а при нужных условиях делайте отправку формы так:
    Код:
    $('form[name=authForm]').submit();
    и делать отладку будет легко и просто
     
  6. flamedeluxe

    flamedeluxe Создатель

    Регистр.:
    18 ноя 2013
    Сообщения:
    38
    Симпатии:
    20
    А не проще return false; использовать
     
  7. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    643
    Симпатии:
    369
    после этого функция завершится и последующий код не выполнится, в том числе и отправка формы
     
  8. flamedeluxe

    flamedeluxe Создатель

    Регистр.:
    18 ноя 2013
    Сообщения:
    38
    Симпатии:
    20
    ну так а разве не это нужно
    Код:
    $('form[name=authForm]').bind('submit', function(e) {
            var login_lg = $('#login_pole1').val();
    
            if(login_lg.match(/^\+?\d{8,14}$/)){ // Если передан номер мобильного телефона
    
                $.ajax("/ajax/val_phone.php", {
                    cache: false,
                    data: {
                        "phone_num": login_lg
                    },
                    type: "GET",
                    dataType: "json",
                    proccessData: false,
                    success: function(fdt){
    
                        // Номер телефона не подтвержден - предотвращаем сабмит формы и выводим алерт
                        if(fdt.otvet == 0){
                           
                            alert("phone not confirmed");
                            return false;
                        }
                    },
                    error: function(){ alert('ajax error...'); },
                   
                   
                });
            }
        });
     
    Последнее редактирование: 14 июн 2015
  9. BaBL

    BaBL Постоялец

    Регистр.:
    13 ноя 2012
    Сообщения:
    144
    Симпатии:
    87
    В старых ИЕ вы получите белую страницу с надписью false
     
  10. flamedeluxe

    flamedeluxe Создатель

    Регистр.:
    18 ноя 2013
    Сообщения:
    38
    Симпатии:
    20
    Давно отказался от поддержки ие меньше 9