Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.07.2019, 16:08
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Валидация формы
Здравствуйте.Я создал форму,проверка котороый должна осуществляться на javascript при нажатии на "отправить".Вот мой код:
<!DOCTYPE html>
<html>
 <head>
<meta charset="UTF-8">
  <title>Форма</title>
   <style>
  
   body 
   {
    background: #f6e8d7;
   }
   #helpMe
   {
    
      background: #f0f0f0;
    width: 400px;
    padding: 10px; /* Iiey 
    border: 2px solid #000; 
	
   }
   input[type="submit"]	
   {
	  
	   border: 4px inset #100;
	    cursor: url(WorldOfWarCraft/arrow.cur),pointer;
	   
   }
   p b
   {
	   color:orange;
	   border: 1px inset #100;
	   box-shadow: 0 0 10px rgba(0,0,0,0.5);
	   background: #808080;
	   outline-style: outset;
   }
   img.rightfoto
   {
	float:right;
    margin: 4px 750px 2px 0px;   
   }
   
  </style>
 </head>


   
 <body>
  <form method="GET" action="handler.php" class="formWithValidation">
  <img class="rightfoto" src="image.png" alt="aeuoa?iaoeaiue oaeno"  >
  <fieldset style="width: 400px;">
  <p><b name="textX"> X</b></p>
	     
    
		   <div id="helpMe"> 
		   
		    <input type="checkbox" class='checkboxxx field'  name="InputX" value="2"> 2
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-1.5">-1.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-1">-1
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-0.5">-0.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="0">0
				<input type="checkbox" class='checkboxxx field' name="InputX" value="0.5">0.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="1">1
				<input type="checkbox" class='checkboxxx field' name="InputX" value="1.5">1.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="2">2
				 
				</div>
				
				<Br>
			
			
	<p><b> Y</b></p>
           
				<p><input type="text" class="Y"  maxlength="5" size="6" name="InputY" placeholder=" от -3 до 3"></p>
			
	
	<p><b> R</b></p>
	<p>
	
		<input name="InputR"  class='RRR field' type="radio" value="1">1
		<input name="InputR" class='RRR field' type="radio" value="1.5"> 1.5
		<input name="InputR" class='RRR field' type="radio" value="2"> 2
		<input name="InputR" class='RRR field' type="radio" value="2.5"> 2.5
		<input name="InputR" class='RRR field' type="radio" value=" 3"> 3
		 
    </p>
	<p><input type="submit"  onclick="validate(this.form)" class="validateBtn" ></p>
	   </fieldset>
	   
</form>

  <script>
  var SMSx;
  var SMSy;
  var SMSr;
      
    function showError(container, errorMessage) {
      container.className = 'error';
     var msgElem = document.createElement('span');
      msgElem.className = "error-message";
      msgElem.innerHTML = errorMessage;
      container.appendChild(msgElem);
      
    }
 
    function resetError(container) {
      container.className = '';
      if (container.lastChild.className == "error-message") {
        container.removeChild(container.lastChild);
      }
    }
    
    function validate(form) 
    {
      event.preventDefault();
      var elems = form.elements;
      resetError(document.body);
      if (elems.InputY.value) 
      {
        
       SMSy=""
        
      }
      else
      {
         SMSy=" Введите Y <Br>"
         
      }
      resetError(document.body);

      if ((elems['InputX'][0].checked==true)||(elems['InputX'][1].checked==true)||
      (elems['InputX'][2].checked==true)||(elems['InputX'][3].checked==true)||
      (elems['InputX'][4].checked==true)||(elems['InputX'][5].checked==true)||
      (elems['InputX'][6].checked==true)||(elems['InputX'][7].checked==true)
      ||(elems['InputX'][7].checked==true))
      {
		        SMSx=""
		          
	    }
       	else
       	{
		        SMSx="<p style="font-size: 120%; font-family: monospace; color: #cd66cc">Введите X </p> ";
	        }
	        if ((elems['InputR'][0].checked==true)||(elems['InputR'][1].checked==true)||
      (elems['InputR'][2].checked==true)||(elems['InputR'][3].checked==true)||
      (elems['InputR'][4].checked==true))
      {
		        SMSr=""
		          
	    }
       	else
       	{
		        SMSr="Введите R <Br>";
	        }
	      
     showError(document.body, SMSx+SMSy+SMSr);
      
    
    }
  </script>
</body>

</html>


event.preventDefault();
По идее эта функция должна отключать действие по умолчанию,т.е переход к скрипту на php,но этого не происходит.Почему?
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2019, 16:19
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

1) откуда переменная event?
2) поменять type на button
3) https://stackoverflow.com/questions/...194739#7194739
4) повесить "слушатель" )
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2019, 16:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Потому, что нет у кнопки с событием click действия по умолчанию. Удалите у нее обработчик и добавьте форме onsubmit="validate(this)", проверьте после этого (то есть, в обеих случаях вывести в консоль event).

Последний раз редактировалось laimas, 24.07.2019 в 16:38.
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2019, 20:56
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от laimas Посмотреть сообщение
Потому, что нет у кнопки с событием click действия по умолчанию. Удалите у нее обработчик и добавьте форме onsubmit="validate(this)", проверьте после этого (то есть, в обеих случаях вывести в консоль event).
Попробовал ваш вариант.Там тоже самое происходит.Буду пробовать вариант выше
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2019, 20:58
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от SuperZen Посмотреть сообщение
1) откуда переменная event?
2) поменять type на button
3) https://stackoverflow.com/questions/...194739#7194739
4) повесить "слушатель" )
2)А как же отправится форма?
1)Так вроде ж объект события автоматически появляется при срабатывании нажатия,автоиматически в качестве параметра в функцию добавляется

Последний раз редактировалось stavatar@yandex.ru, 24.07.2019 в 21:08.
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2019, 21:23
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Я повесил слушатель,Но не работает
<!DOCTYPE html>
<html>
 <head>
<meta charset="ISO-8859-1">
  <title>Ôîðìû</title>
   <style>
  
   body 
   {
    background: #f6e8d7;
   }
   #helpMe
   {
    
      background: #f0f0f0; /* Oaao oiia */
    width: 400px; /* Oe?eia aeiea */
    padding: 10px; /* Iiey */
    border: 2px solid #000; /* Ia?aiao?u ?aiee */
	
   }
   input[type="submit"]	
   {
	  
	   border: 4px inset #100;
	    cursor: url(WorldOfWarCraft/arrow.cur),pointer;
	   
   }
   p b
   {
	   color:orange;
	   border: 1px inset #100;
	   box-shadow: 0 0 10px rgba(0,0,0,0.5);
	   background: #808080;
	   outline-style: outset;
   }
   img.rightfoto
   {
	float:right;
    margin: 4px 750px 2px 0px;   
   }
   
  </style>
 </head>


   
 <body>
 <form method="GET" action="handler.php" class="formWithValidation">
  <img class="rightfoto" src="image.png" alt="aeuoa?iaoeaiue oaeno"  >
  <fieldset style="width: 400px;">
  <p><b name="textX"> X</b></p>
	     
    
		   <div id="helpMe"> 
		   
		    <input type="checkbox" class='checkboxxx field'  name="InputX" value="2"> 2
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-1.5">-1.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-1">-1
				<input type="checkbox" class='checkboxxx field' name="InputX" value="-0.5">-0.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="0">0
				<input type="checkbox" class='checkboxxx field' name="InputX" value="0.5">0.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="1">1
				<input type="checkbox" class='checkboxxx field' name="InputX" value="1.5">1.5
				<input type="checkbox" class='checkboxxx field' name="InputX" value="2">2
				 
				</div>
				
				<Br>
			
			
	<p><b> Y</b></p>
           
				<p><input type="text" class="Y"  maxlength="5" size="6" name="InputY" placeholder=" от -3 до 3"></p>
			
	
	<p><b> R</b></p>
	<p>
	
		<input name="InputR"  class='RRR field' type="radio" value="1">1
		<input name="InputR" class='RRR field' type="radio" value="1.5"> 1.5
		<input name="InputR" class='RRR field' type="radio" value="2"> 2
		<input name="InputR" class='RRR field' type="radio" value="2.5"> 2.5
		<input name="InputR" class='RRR field' type="radio" value=" 3"> 3
		 
    </p>
	<p><input type="submit"   class="validateBtn" ></p>
	   </fieldset>
	   
</form>

  <script>
  var SMSx;
  var SMSy;
  var SMSr;
  var form=document.querySelector('.formWithValidation');
      

    function showError(container, errorMessage) {
      container.className = 'error';
     var msgElem = document.createElement('span');
      msgElem.className = "error-message";
      msgElem.innerHTML = errorMessage;
      container.appendChild(msgElem);
      
    }
 
    function resetError(container) {
      container.className = '';
      if (container.lastChild.className == "error-message") {
        container.removeChild(container.lastChild);
      }
    }
    
    form.addEventListener('submit', function (event) {
  event.preventDefault() ;
      var elems = form.elements;
      resetError(document.body);
      if (elems.InputY.value) 
      {
        
       SMSy=""
        
      }
      else
      {
         SMSy=" Введите Y <Br>"
         
      }
      resetError(document.body);

      if ((elems['InputX'][0].checked==true)||(elems['InputX'][1].checked==true)||
      (elems['InputX'][2].checked==true)||(elems['InputX'][3].checked==true)||
      (elems['InputX'][4].checked==true)||(elems['InputX'][5].checked==true)||
      (elems['InputX'][6].checked==true)||(elems['InputX'][7].checked==true)
      ||(elems['InputX'][7].checked==true))
      {
		        SMSx=""
		          
	    }
       	else
       	{
		        SMSx="<p style="font-size: 120%; font-family: monospace; color: #cd66cc">Введите X </p> ";
	        }
	        if ((elems['InputR'][0].checked==true)||(elems['InputR'][1].checked==true)||
      (elems['InputR'][2].checked==true)||(elems['InputR'][3].checked==true)||
      (elems['InputR'][4].checked==true))
      {
		        SMSr=""
		          
	    }
       	else
       	{
		        SMSr="Введите R <Br>";
	        }
	      
     showError(document.body, SMSx+SMSy+SMSr);
    }
  </script>



</body>

</html>
Ответить с цитированием
  #7 (permalink)  
Старый 24.07.2019, 21:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Потому, что ошибки:

строка 142 должно быть - SMSx="<p style=\"font-size: 120%; font-family: monospace; color: #cd66cc\">Введите X </p> ";, либо в одинарных кавычках двойные.

строка 157 должно быть }), и точка с запятой если далее есть код.

А то что ранее я писал, это не способ, а для уяснения почему не работает - выведите в консоль event в обеих случаях (для onclick и onsubmit) и просмотрите его свойства, ответ на вопрос будет дан практически в самом начале его.
Ответить с цитированием
  #8 (permalink)  
Старый 24.07.2019, 21:45
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от laimas Посмотреть сообщение
Потому, что ошибки:

строка 142 должно быть - SMSx="<p style=\"font-size: 120%; font-family: monospace; color: #cd66cc\">Введите X </p> ";, либо в одинарных кавычках двойные.

строка 157 должно быть }), и точка с запятой если далее есть код.

А то что ранее я писал, это не способ, а для уяснения почему не работает - выведите в консоль event в обеих случаях (для onclick и onsubmit) и просмотрите его свойства, ответ на вопрос будет дан практически в самом начале его.
Огромное спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация веб формы giovanni Events/DOM/Window 3 01.09.2017 15:49
Валидация формы работает не совсем так Batyabest Events/DOM/Window 12 26.11.2016 02:07
Валидация формы в зависимости от значения radio batton housewm Events/DOM/Window 1 10.01.2014 18:46
Валидация формы Ваяс Элементы интерфейса 8 11.07.2012 15:20
Валидация формы dmsuslov jQuery 4 05.11.2010 16:12