Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.11.2016, 10:43
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Валидация формы работает не совсем так
Здравствуйте.
Есть форма, состоящая из ряда одинаковых блоков
<div class="progblock">
<div class="strelka"><a href=""><img src="/template/img/ico/strelka.png" class="img-responsive"></a></div>
<label class="bold_name"><input type="checkbox" name="public" 
class="public osnova" value="Программа 1"> Программа 1</label>

<div class="napravlenie hides" style="display:none;">
         <div class="checkbox col-xs-6 forma_obuchen">
             <select name="ot_forma1" class="form-control">
              <option value="">Форма обучения</option>
                <option value="Очно-заочная">Очно-заочная</option>
                <option value="Дистанционная">Дистанционная</option>
             </select>
         </div>
         <div class="checkbox col-xs-6 kolvo_uchenik">
         <input type="number" name="ot_kolvo1" value="" 
class="form-control" placeholder="Число слушателей">
         </div>
         </div>
<div class="clearfix"></div>
</div>


Есть скрипт, отвечающий за сбор данных с формы и передачу их на следующий шаг, а также за валидацию формы. У нас при выборе каких-либо чекбоксов происходит разворачивание скрытого блока под чекбоксом и там уже пользователь выбирает форму обучения и количество слушателей. Вот без выбранных этих двух полей дальнейший шаг - открытие модального окна выполняться не должен.
$(document).ready(function() {
	$('a.podtv').click(function(e) {
		e.preventDefault();
		
		var arr= [].map.call($('input:checkbox:checked'),function(el) {
		var parent = $(el).parents('.progblock');
		return {'name' : el.value, 'type' : $('select',parent).val(), 'val' : $('[type="number"]',parent).val()}});
		var mass = JSON.stringify(arr, null, 4);
// Блок валидации
var es = $('input:checkbox:checked')
var parents = $(es).parents('.progblock');
var selprogblock = $('select',parents).val();
var numprogblock = $('[type="number"]',parents).val();
// Проверяем выбрана ли форма обучения
if (selprogblock == '') {
	alert('Выберите форму обучения!');
}
// Проверяем выбрано ли количество слушателей
else if (numprogblock == '') {
	alert('Введите количество слушателей!');
}
else {
for (var i = 0; i < arr.length; i++) {
	$(".info_users_prog").append('<p>' + arr[i].name + '</p><ul><li>' + arr[i].type + '</li><li>' + arr[i].val + '</li></ul>');
	$(".parameter").append('<input type="hidden" name="names[]" value="' + arr[i].name + '">');
	$(".parameter").append('<input type="hidden" name="types[]" value="' + arr[i].type + '">');
	$(".parameter").append('<input type="hidden" name="vals[]" value="' + arr[i].val + '">');
	$("#myModal").show("slow");
}
}
});
	$('button.close').click(function(e) {
		$("#myModal").hide("slow");
		arr = [];
		$('.info_users_prog').empty();
	});
	$('button.closer').click(function(e) {
		$("#myModal").hide("slow");
		arr = [];
		$('.info_users_prog').empty();
		$('.parameter').empty();
	});
});


Но на практике форма состоит не из одного блока а из многих. И если хотя бы в одном из них данные по форме обучения и количеству слушателей выбраны, то на остальные валидация не реагирует и форма проходит валидацию.
Как сделать чтобы проверялись все поля у выбранных чекбоксов?
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2016, 10:19
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Помогите, пожалуйста. Все уже перепробовал, не получается правильно сделать валидацию все select и input из выбранных checkbox.
Ответить с цитированием
  #3 (permalink)  
Старый 24.11.2016, 16:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Полям обязательным к заполнению добавьте атрибут required и браузер сам не разрешит отправку формы при незаполненных. А уже скрпту получить коллекцию этих полей и проверить их заполнение после trim.
Ответить с цитированием
  #4 (permalink)  
Старый 24.11.2016, 17:42
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Сообщение от laimas Посмотреть сообщение
Полям обязательным к заполнению добавьте атрибут required и браузер сам не разрешит отправку формы при незаполненных. А уже скрипту получить коллекцию этих полей и проверить их заполнение после trim.
Проблема в том, что это не совсем форма. Она не обернута в теги <form></form>
По сути это просто набор div'ов а все действо происходит по нажатию на ссылку с классом podtv
А вот уже потом открывается модальное окно с формой, в которую переданы выбранные данные и там уже пользователь вводит имя, телефон и т.д. и отправляет.
Мне же нужно, чтобы даже модалка не открывалась и вылезало сообщение если в каком-либо из выбранных чекбоксов не выбрана форма обучения или не проставлено количество слушателей.
Если нужно, могу полный код выложить.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2016, 19:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Batyabest
Проблема в том, что это не совсем форма.
Это не есть проблема, добавить атрибут можно любому тегу.

else if (numprogblock == '') {
alert('Введите количество слушателей!');
}


А "помечаем" нужные нам элементы (которые обязательно должны быть выбраны), в атрибутах их же можно описать и правила/текст, чтобы не лепить на каждый блок свои проверки и не дай бог свои обработчики.

В конечном же итоге сервер будут ожидать поля, которые судя по условию должны быть обязательно заполнены/выбраны, а уж в каком порядке это было сделано на клиенте, так это не так и важно.
Ответить с цитированием
  #6 (permalink)  
Старый 24.11.2016, 19:51
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Сообщение от laimas Посмотреть сообщение
Это не есть проблема, добавить атрибут можно любому тегу.

else if (numprogblock == '') {
alert('Введите количество слушателей!');
}


А "помечаем" нужные нам элементы (которые обязательно должны быть выбраны), в атрибутах их же можно описать и правила/текст, чтобы не лепить на каждый блок свои проверки и не дай бог свои обработчики.

В конечном же итоге сервер будут ожидать поля, которые судя по условию должны быть обязательно заполнены/выбраны, а уж в каком порядке это было сделано на клиенте, так это не так и важно.
А как это в коде сделать? Подскажите примерчиком, а то не допетрю сам...
Ответить с цитированием
  #7 (permalink)  
Старый 24.11.2016, 20:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Точно также как например определить один обработчик на несколько элементов. То есть флажки или иное имеют один обработчик, который раскрывает следующие поля для выбора. А данным полям как-то <select name="ot_forma1" class="form-control"> атрибут required - <select name="ot_forma1" class="form-control" required>. Если запрашивается на раскрытие полей, то проверяется есть ли у запрашиваемого блока предыдущий и если есть, то получить все поля с атрибутом required, и открыть блок только в том случае, если эти поля заполнены/выбраны. Ну и при отправке формы уже все обязательные поля проверяются на заполнение/выбор.

Что сложного то?
Ответить с цитированием
  #8 (permalink)  
Старый 24.11.2016, 20:29
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Вы имеете ввиду обработчик, который раскрывает поля при установке флажка? У меня сейчас это примитивный код:
$(document).ready(function() { 
    $(".public").change(function() { 
        if ($(this).prop("checked")) { 
            $(this).parent().next(".hides").fadeIn().show(); 
            return; 
        } else { 
             $(this).parent().next(".hides").fadeOut(300); 
        } 
    }); 
})


Сюда надо добавить что-то?
Ответить с цитированием
  #9 (permalink)  
Старый 25.11.2016, 11:49
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Я прошу помощи, сам не могу понять как мне сделать так, чтобы он проверял не поля первого выбранного чекбокса, а все остальные выбранные тоже. Сейчас он проверяет только первый. Может как-то в массив нужно все добавлять для проверки?
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2016, 11:50
Профессор
Отправить личное сообщение для Batyabest Посмотреть профиль Найти все сообщения от Batyabest
 
Регистрация: 14.09.2013
Сообщений: 252

Сообщение от laimas Посмотреть сообщение
Точно также как например определить один обработчик на несколько элементов. То есть флажки или иное имеют один обработчик, который раскрывает следующие поля для выбора. А данным полям как-то <select name="ot_forma1" class="form-control"> атрибут required - <select name="ot_forma1" class="form-control" required>. Если запрашивается на раскрытие полей, то проверяется есть ли у запрашиваемого блока предыдущий и если есть, то получить все поля с атрибутом required, и открыть блок только в том случае, если эти поля заполнены/выбраны. Ну и при отправке формы уже все обязательные поля проверяются на заполнение/выбор.

Что сложного то?
Атирибут required работает на формах, у меня нет формы есть просто дивы.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация формы, не работает bezverkhy jQuery 6 12.06.2015 14:50
Валидация формы Mick_20 Общие вопросы Javascript 6 11.10.2014 22:29
Не работает отправка формы через ajax Asrover jQuery 8 23.08.2014 16:44
InnerHTML почему-то работает не так, как хотелось бы. помогите Dima00782 Общие вопросы Javascript 2 13.06.2010 21:17
jQuery не так работает на сервере dial jQuery 2 19.11.2009 15:19