Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   запрет отправки аякс формы с валидацией (https://javascript.ru/forum/jquery/47177-zapret-otpravki-ayaks-formy-s-validaciejj.html)

alexmixaylov 12.05.2014 18:47

запрет отправки аякс формы с валидацией
 
Хочу переделать обработчик формы
чтобы страничка не перегружалась

сделал с использованием ajax, отправляет корректно
только одна проблема с валидацией

ругается на неправильно заполненные поля
но форму все равно отправляет
а нужно чтобы не отправляла до тех пор, пока не будет корректно заполнена форма
<input class="button btn-order order-btn" type="submit" value="Заказать">

$(document).ready(function() {
        var sel_phone = $('input[name=phone]');
        sel_phone.mask('+38 (000) 000-00-00');
        if (sel_phone.val().length < 3)    sel_phone.val('+38');
        sel_phone.on('focus, focusout', function () {
            if ($(this).val().length < 3)    $(this).val('+38');
        });

        $('form').submit(function() {
            $('input[name=name]', this).val($.trim($('input[name=name]', this).val()));
            if(!$('input[name=name]', this).val()) {
                alert('Укажите корректные ФИО!');
                return false;
            }

            if(!$('input[name=phone]', this).val() || $('input[name=phone]', this).val().length < 18) {
                alert('Укажите корректный телефон!');
                return false;
            }
            return true;
        });
        $('a.order-btn').click(function(valida) {
            $(this).closest('form').submit();
            return false;
        });
    });

а это обработчик
$(function(){
	$('form').submit(function(e){
		e.preventDefault();
		var m_method=$(this).attr('method');
		var m_action=$(this).attr('action');
		var m_data=$(this).serialize();
		$.ajax({
			type: m_method,
			url: m_action,
			data: m_data,
			success: function(result){
				$('#result').show();
				
				}
			});
		});
});

depp 12.05.2014 19:10

$('input[name=name]', this).val()

а что тут делает this? для чего он тут?

alexmixaylov 12.05.2014 19:20

не смотрел как то в эту сторону
форма не моя, сейчас переделаю
var nameform = $.trim($('input[name=name]').val());
            if(nameform.length < 3) {
                alert('Укажите корректные ФИО!');
                return false;
            }

krasovsky 13.05.2014 09:08

Цитата:

Сообщение от depp (Сообщение 311546)
$('input[name=name]', this).val()

а что тут делает this? для чего он тут?

Вероятно this тут указывает на form, тоесть собрать коллекцию элементов input[name=name] - непосредственных потомков form

Открой консоль и прямо в ней выполни $('input[name=name]', 'YourFormID').val()
И посмотри что напишет

alexmixaylov 13.05.2014 10:46

Спасибо все сделал
вставил скрипт обработчика в скрипт валидации
$(document).ready(function() {
        var sel_phone = $('input[name=phone]');
        sel_phone.mask('+38 (000) 000-00-00');
        if (sel_phone.val().length < 3)    sel_phone.val('+38');
        sel_phone.on('focus, focusout', function () {
            if ($(this).val().length < 3)    $(this).val('+38');
        });

        $('form').submit(function() {
			event.preventDefault();
            $('input[name=name]', this).val($.trim($('input[name=name]', this).val()));
            if(!$('input[name=name]', this).val()) {
                alert('Укажите корректные ФИО!');
                rstopImmediatePropagation();
            }

            if(!$('input[name=phone]', this).val() || $('input[name=phone]', this).val().length < 19) {
                alert('Укажите корректный телефон!');
                stopImmediatePropagation();
            }
//вставляем функцию отправки формы
		var all_data=$(this).serialize();//получаем данные из формы
		alert(all_data);
			$.ajax({
			type: "POST",
			url: "send.php",
			data: all_data,
			success: function(result){
				$('#result').show();//показываем окно
				}
			});
//конец функции            
        });
        $('a.order-btn').click(function() {
            $(this).closest('form').submit();
            rstopImmediatePropagation();
        });
    });


Часовой пояс GMT +3, время: 02:10.