Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2018, 09:19
Аспирант
Отправить личное сообщение для adash Посмотреть профиль Найти все сообщения от adash
 
Регистрация: 31.03.2015
Сообщений: 38

Как проверить заполненность полей в пошаговой форме?
javascript
JAVASCRIPT
Как проверить заполненность полей в пошаговой форме?
Сделал пошаговую форму, но не приложу ума, как прикрутить проверку на заполненность обязательных полей каждого шага
Нужно, чтобы нажимая на кнопку "далее" переход к следующему шагу не осуществлялся, а обязательное поле подсвечивалось, пока не будет заполнено, только после этого у пользователя будет возможность двинуться дальше.

<form>
    <div class="form-tabs">
    
    <div class="tab">
    <fieldset id="fset_basic" class="">
    <span class="more"><legend>Шаг 1</legend></span>
    <div>
    <input type="text" class="input" name="title" value="" id="title" required="">
    </div>
    <div>
    <textarea name="description" class="textarea" rows="" id="description"></textarea>
    </div>
    </div>
    
    <div class="tab">
    <fieldset id="fset_basic" class="">
    <span class="more"><legend>Шаг 2</legend></span>
    <div>
    <input type="text" class="input" name="title" value="" id="title" required="">
    </div>
    <div>
    <textarea name="description" class="textarea" rows="" id="description"></textarea>
    </div>
    </div>
    
    <div class="tab">
    <fieldset id="fset_basic" class="">
    <span class="more"><legend>Шаг 3</legend></span>
    <div>
    <input type="text" class="input" name="title" value="" id="title" required="">
    </div>
    <div>
    <textarea name="description" class="textarea" rows="" id="description"></textarea>
    </div>
    </div>
    </div>
    <div>
    <a href="#" class="back">Назад</a>
    			<a href="#" class="next">Следующий шаг</a>
    </div>
    	
    <div>
    <input class="button-submit" type="submit" name="submit" value="Опубликовать" title="Опубликовать"></div>
    
    </form>

    form div.tab {
    		display:none;
    	}
    
    	a.back {
    		display:none;
    	}
    	
    	form input[type=submit] {
    		display:none;
    	}
    
    .tab input.empty_field {
          border-width: 2px;
          border-color: red;
        }

    $(document).ready(function() { // Ждём загрузки страницы
    	var steps = $(".form-tabs").children(".tab"); // находим все шаги формы
    	$(steps[0]).show(); // показываем первый шаг
    	var current_step = 0; // задаем текущий шаг
    	$("a.next").click(function(){	// Событие клика на ссылку "Следующий шаг"
    			if (current_step == steps.length-2) { // проверяем, будет ли следующий шаг последним
    				$(this).hide(); // скрываем ссылку "Следующий шаг"
    				$("form input[type=submit]").show(); // показываем кнопку "Регистрация"
    			}
    			$("a.back").show(); // показываем ссылку "Назад"
    			current_step++; // увеличиваем счетчик текущего слайда
    			changeStep(current_step); // меняем шаг
    	});
    	
    	$("a.back").click(function(){	// Событие клика на маленькое изображение
    		if (current_step == 1) { // проверяем, будет ли предыдущий шаг первым
    			$(this).hide(); // скрываем ссылку "Назад"
    		}
    		$("form input[type=submit]").hide(); // скрываем кнопку "Регистрация"
    		$("a.next").show(); // показываем ссылку "Следующий шаг"
    		current_step--; // уменьшаем счетчик текущего слайда
    		changeStep(current_step);// меняем шаг
    	});
    	
    	function changeStep(i) { // функция смены шага
    		$(steps).hide(); // скрываем все шаги
    		$(steps[i]).show(); // показываем текущий
    	}
    });
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2018, 10:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Одинаковые id недопустимы, в них нет никакой пользы, а одинаковые имена полей ввода в случае на сервере РНР, это проблемы, если вы только не сами обрабатываете сырые данные.

$(steps[0]).show() - не обязательно, можно CSS задать скрытыми, кроме первого. А проверять нужно не current_step, а заполненность предыдущих полей, ведь их можно очистить на любом шаге.
Ответить с цитированием
  #3 (permalink)  
Старый 30.08.2018, 10:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,118

форма пошаговая обязательные поля
Сообщение от adash
как прикрутить проверку на заполненность обязательных полей каждого шага
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  form div.tab {
      display: none;
  }
  a.back {
      display: none;
  }
  form input[type=submit] {
      display: none;
  }
  .tab input.empty_field {
      border-width: 2px;
      border-color: red;
  }
  .err [required] {
      border: 2px solid red;
  }
  .err:after {
      content: 'это поле необходимо заполнить';
  }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    var form = $("form");
    var tab = form.find(".tab");
    var current_index = 0;
    var len = tab.length;

    function show() {
        $("form input[type=submit]").toggle(current_index == len);
        $(".next").toggle(current_index < len);
        $(".back").toggle(current_index > 0);
        tab.hide().eq(current_index).show()
    }
    show();
    form.on("click", ".next", function(event) {
        event.preventDefault();
        var current_tab = tab.eq(current_index);
        var elems = $("[required]", current_tab);
        var required = [].every.call(elems, function(el) {
            var ok = el.value.trim();
            ok ? el.parentNode.classList.remove("err") :
                el.parentNode.classList.add("err");
            return ok
        });
        if (required) {
            current_index++;
            show()
        }
    });
    form.on("click", ".back", function(event) {
        event.preventDefault();
        current_index--;
        show()
    });
    form.on("input", "[required]", function(event) {
        var ok = this.value.trim();
        ok && this.parentNode.classList.remove("err")
    })
});
  </script>
</head>

<body>
<form>
        <div class="form-tabs">

        <div class="tab">
        <fieldset id="fset_basic" class="">
        <span class="more"><legend>Шаг 1</legend></span>
        <div>
        <input type="text" class="input" name="title" value="" id="title" required="">
        </div>
        <div>
        <textarea name="description" class="textarea" rows="" id="description"></textarea>
        </div>
        </div>

        <div class="tab">
        <fieldset id="fset_basic" class="">
        <span class="more"><legend>Шаг 2</legend></span>
        <div>
        <input type="text" class="input" name="title" value="" id="title" required="">
        </div>
        <div>
        <textarea name="description" class="textarea" rows="" id="description"></textarea>
        </div>
        </div>

        <div class="tab">
        <fieldset id="fset_basic" class="">
        <span class="more"><legend>Шаг 3</legend></span>
        <div>
        <input type="text" class="input" name="title" value="" id="title" required="">
        </div>
        <div>
        <textarea name="description" class="textarea" rows="" id="description"></textarea>
        </div>
        </div>
        </div>
        <div>
        <a href="#" class="back">Назад</a>
                    <a href="#" class="next">Следующий шаг</a>
        </div>

        <div>
        <input class="button-submit" type="submit" name="submit" value="Опубликовать" title="Опубликовать"></div>

        </form>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2018, 10:36
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<style>
    form div.tab {
    		display:none;
    	}
    
    	a.back {
    		display:none;
    	}
    	
    	form input[type=submit] {
    		display:none;
    	}
    
    .empty_field {
          border-width: 2px;
          border-color: red;
        }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script>
    $(document).ready(function() { // Ждём загрузки страницы
    	var steps = $(".form-tabs").children(".tab"); // находим все шаги формы
    	$(steps[0]).show(); // показываем первый шаг
    	var current_step = 0; // задаем текущий шаг
    	$("a.next").click(function(){	// Событие клика на ссылку "Следующий шаг"
    			var req= $(steps[current_step]).find('input');
                        if($(req).attr('required') == 'required' && req.val() == '') {
                            $(req).addClass('empty_field');
    			} else {
                            $(req).removeClass('empty_field');
    			   if (current_step == steps.length-1) { // проверяем, будет ли следующий шаг последним
    				$(this).hide(); // скрываем ссылку "Следующий шаг"
    				$("form input[type=submit]").show(); // показываем кнопку "Регистрация"
    			   }
    			   $("a.back").show(); // показываем ссылку "Назад"
    			   current_step++; // увеличиваем счетчик текущего слайда
    			   changeStep(current_step); // меняем шаг
    			}
    	});
    	
    	$("a.back").click(function(){	// Событие клика на маленькое изображение
    		if (current_step == 1) { // проверяем, будет ли предыдущий шаг первым
    			$(this).hide(); // скрываем ссылку "Назад"
    		}
    		$("form input[type=submit]").hide(); // скрываем кнопку "Регистрация"
    		$("a.next").show(); // показываем ссылку "Следующий шаг"
    		current_step--; // уменьшаем счетчик текущего слайда
    		changeStep(current_step);// меняем шаг
    	});
    	
    	function changeStep(i) { // функция смены шага
    		$(steps).hide(); // скрываем все шаги
    		$(steps[i]).show(); // показываем текущий
    	}
    });
</script>
<form>
  <fieldset id="fset_basic" class="">
    <div class="form-tabs">
    
       <div class="tab">

          <span class="more"><legend>Шаг 1</legend></span>
          <div>
             <input type="text" class="input" name="title" value="" id="title" required="">
          </div>
          <div>
               <textarea name="description" class="textarea" rows="" id="description"></textarea>
          </div>
       </div>
    
       <div class="tab">

           <span class="more"><legend>Шаг 2</legend></span>
           <div>
              <input type="text" class="input" name="title" value="" id="title" required="">
           </div>
           <div>
                <textarea name="description" class="textarea" rows="" id="description"></textarea>
           </div>
       </div>
    
       <div class="tab">

           <span class="more"><legend>Шаг 3</legend></span>
           <div>
               <input type="text" class="input" name="title" value="" id="title" required="">
           </div>
           <div>
                <textarea name="description" class="textarea" rows="" id="description"></textarea>
           </div>
        </div>
    </div>

    	
    <div>
        <input class="button-submit" type="submit" name="submit" value="Опубликовать" title="Опубликовать">
    </div>
   </fieldset>    
</form>
    <div>
        <a href="#" class="back">Назад</a>
        <a href="#" class="next">Следующий шаг</a>
    </div>

Последний раз редактировалось Dilettante_Pro, 30.08.2018 в 13:31.
Ответить с цитированием
  #5 (permalink)  
Старый 30.08.2018, 12:13
Аспирант
Отправить личное сообщение для adash Посмотреть профиль Найти все сообщения от adash
 
Регистрация: 31.03.2015
Сообщений: 38

Спасибо большое за решение! Но у меня не работает, т.к. ссылки "дальше" и "назад" выводятся вне формы.
Ответить с цитированием
  #6 (permalink)  
Старый 30.08.2018, 12:20
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

adash,
что мешает отпозиционировать?
Ответить с цитированием
  #7 (permalink)  
Старый 30.08.2018, 12:23
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от adash
у меня не работает, т.к. ссылки "дальше" и "назад" выводятся вне формы
Читал, читал - ничего не понял.
Что значит - не работает?
Что значит - вне формы?
Ответить с цитированием
  #8 (permalink)  
Старый 30.08.2018, 12:24
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Dilettante_Pro,
видимо визуально вне формы
Ответить с цитированием
  #9 (permalink)  
Старый 30.08.2018, 12:32
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Тогда надо строку
<fieldset id="fset_basic" class="">
поставить сразу после тега <form>, все остальные удалить.
Перед тегом </form> вставить </fieldset>

Соответственно изменил пост 4

Последний раз редактировалось Dilettante_Pro, 30.08.2018 в 12:37.
Ответить с цитированием
  #10 (permalink)  
Старый 30.08.2018, 12:43
Аспирант
Отправить личное сообщение для adash Посмотреть профиль Найти все сообщения от adash
 
Регистрация: 31.03.2015
Сообщений: 38

Я имел ввиду, что фома генерируется с помощью Php кода и нет возможности поставить ссылки перед закрывающим тегом </form>

</form>
<a href="#" class="back">Назад</a>
<a href="#" class="next">Следующий шаг</a>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить авторизован ли пользователь в соц сетях AnteFil Элементы интерфейса 3 28.11.2016 03:58
Как проверить корректность поля e-mail? daniilino Общие вопросы Javascript 9 15.05.2012 16:50
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40
Добавление новых полей к форме. EZh Элементы интерфейса 7 14.06.2008 04:05