Перезаполнение
Всем привет. У меня возник вопрос по формам. Не могу найти как делать перезаполнение формы в случае ошибки? Например есть 4 поля три ввели а четвертое или ввели или неправильно ввели. Вылезло сообщение об ошибки и все поля стали пусты. Я же хочу что бы все поля заполненные таковыми и оставались а на незаполненом поле стоял курсор. Если кто знает подскажите пожалуйста. Заранее всех благодарю!
|
PSV,
где код? |
<!DOCTYPE HTML>
<html lang="en"> <head> <meta charset="UTF-8"> <title>TZ</title> <style> .light::-webkit-input-placeholder {color:blue;opacity: 0.5} .light::-moz-placeholder {color:blue;opacity: 0.5} .light:-moz-placeholder {color:blue;opacity: 0.5} .light:-ms-input-placeholder {color:blue;opacity: 0.5} .highlight::-webkit-input-placeholder {color:blue;opacity: 0} .highlight::-moz-placeholder {color:blue;opacity: 0} .highlight:-moz-placeholder {color:blue;opacity: 0} .highlight:-ms-input-placeholder {color:blue;opacity: 0} </style> <script> function validate(){ var fn_val=document.forms["Myform"].elements["fname"].value; var ln_val=document.forms["Myform"].elements["lname"].value; var job_val=document.forms["Myform"].elements["job"].value; var com_val=document.forms["Myform"].elements["company"].value; if(fn_val == ""){ alert('Имя должно быть обязательно введено') fname.focus = function() {this.className='highlight'} } if (ln_val == "") { alert('Фамилия должна быть обязательно введена') lname.focus = function() {this.className='highlight'} } if(job_val == ""){ alert('Должность должна быть обязательно введена') job.focus = function() {this.className='highlight'} } if (com_val == "") { alert('Компания должна быть обязательно введена') company.focus = function() {this.className='highlight'} } } function checkLname(){ var fn_val=document.forms["Myform"].elements["fname"].value; var ln_val=document.forms["Myform"].elements["lname"].value; var job_val=document.forms["Myform"].elements["job"].value; var com_val=document.forms["Myform"].elements["company"].value; var r =/([a-z]+)/i; if (fn_val.search(r)< 0){alert("Некорректное введено имя!")} if (ln_val.search(r)< 0){alert("Некорректно введена фамилия!")} if (job_val.search(r)< 0){alert("Некорректно введена должность!")} if (com_val.search(r)< 0){alert("Некорректно введена компания!")} } </script> </head> <body> <form name="Myform"> <input type="text" class="light" id="fn" name="fname" placeholder="First name" onfocus="focusElem(this)" onblur="blurElem(this)" > <input type="text" class="light" id="ln" name="lname" placeholder="Last name" onfocus="focusElem(this)" onblur="blurElem(this)" > <br> <input type="text" class="light" id="j" name="job"placeholder="Job" onfocus="focusElem(this)" onblur="blurElem(this)"> <input type="text" class="light" id="com" name="company" placeholder="Company" onfocus="focusElem(this)" onblur="blurElem(this)"> <br> <input type="submit" value="Send" onclick="validate(); checkLname()"> </form> <script> function focusElem (elem) { elem.className='highlight'; } function blurElem (elem) { elem.className ='light'; } </script> </body> </html> |
var fn_val=document.forms["Myform"].elements["fname"].value; var ln_val=document.forms["Myform"].elements["lname"].value; var job_val=document.forms["Myform"].elements["job"].value; var com_val=document.forms["Myform"].elements["company"].value; var r =/([a-z]+)/i; if (fn_val.search(r)< 0){alert("Некорректное введено имя!")} if (ln_val.search(r)< 0){alert("Некорректно введена фамилия!")} if (job_val.search(r)< 0){alert("Некорректно введена должность!")} if (com_val.search(r)< 0){alert("Некорректно введена компания!")} У вас один паттерн для всех полей формы -зачем же вы получаете значения каждого поля отдельной строкой, отдельной же строкой производите проверку, почему не делаете это в цикле получая поле и проверяя его? |
Я не знаю как это делать в цикле. Ну даже если и так как это влияет на заполненность? У меня все пропадает после вывода ошибки, как будто перегружается страница!
|
Цитата:
|
PSV,
примерно так структура -- сократить много можно <!DOCTYPE HTML> <html lang="en"> <head> <meta charset="UTF-8"> <title>TZ</title> <style> .light::-webkit-input-placeholder {color:blue;opacity: 0.5} .light::-moz-placeholder {color:blue;opacity: 0.5} .light:-moz-placeholder {color:blue;opacity: 0.5} .light:-ms-input-placeholder {color:blue;opacity: 0.5} .highlight::-webkit-input-placeholder {color:blue;opacity: 0} .highlight::-moz-placeholder {color:blue;opacity: 0} .highlight:-moz-placeholder {color:blue;opacity: 0} .highlight:-ms-input-placeholder {color:blue;opacity: 0} </style> <script> function validate(){ var fn_val=document.forms["Myform"].elements["fname"].value; var ln_val=document.forms["Myform"].elements["lname"].value; var job_val=document.forms["Myform"].elements["job"].value; var com_val=document.forms["Myform"].elements["company"].value; /* if(fn_val == ""){ alert('Имя должно быть обязательно введено') fname.focus = function() {this.className='highlight'} } if (ln_val == "") { alert('Фамилия должна быть обязательно введена') lname.focus = function() {this.className='highlight'} } if(job_val == ""){ alert('Должность должна быть обязательно введена') job.focus = function() {this.className='highlight'} } if (com_val == "") { alert('Компания должна быть обязательно введена') company.focus = function() {this.className='highlight'} }*/ return (checkLname() && com_val && job_val && ln_val && fn_val) } function checkLname(){ var fn_val=document.forms["Myform"].elements["fname"].value; var ln_val=document.forms["Myform"].elements["lname"].value; var job_val=document.forms["Myform"].elements["job"].value; var com_val=document.forms["Myform"].elements["company"].value; var r =/([a-z]+)/i; if (fn_val.search(r)< 0){alert("Некорректное введено имя!")} if (ln_val.search(r)< 0){alert("Некорректно введена фамилия!")} if (job_val.search(r)< 0){alert("Некорректно введена должность!")} if (com_val.search(r)< 0){alert("Некорректно введена компания!")} return (fn_val.search(r) != -1 && ln_val.search(r)!= -1 && job_val.search(r)!= -1 && com_val.search(r) != -1) } </script> </head> <body> <form name="Myform" onsubmit="return validate()"> <input type="text" class="light" id="fn" name="fname" placeholder="First name" onfocus="focusElem(this)" onblur="blurElem(this)" > <input type="text" class="light" id="ln" name="lname" placeholder="Last name" onfocus="focusElem(this)" onblur="blurElem(this)" > <br> <input type="text" class="light" id="j" name="job"placeholder="Job" onfocus="focusElem(this)" onblur="blurElem(this)"> <input type="text" class="light" id="com" name="company" placeholder="Company" onfocus="focusElem(this)" onblur="blurElem(this)"> <br> <input type="submit" value="Send" > </form> <script> function focusElem (elem) { elem.className='highlight'; } function blurElem (elem) { elem.className ='light'; } </script> </body> </html> |
PSV,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Как, обычно, обойти в цикле элементы формы, передав их в функцию:
[ntml]<input type="submit" value="Send" onclick="validate(this.form.elements)">[/hml] Но лучше не передавать в функцию по щелчку кнопки отправки, а зайдествовать событие формы onsubmit: <form name="Myform"> [ntml]<form name="Myform" onsubmit="return validate(this.elements)"> .... <input type="submit" value="Send">[/hml] Функцию checkLname() выкинуть, так как она у вас ничем полезным не занимается - alert('Имя должно быть обязательно введено') и alert("Некорректное введено имя!") это результат проверки, разница лишь в условии, а значит это может с успехом выполнить одна функция. Функция validate(e) должна иметь параметр (например как тут, е), который и содержит массив всех элементов формы переданный ей по нажатию кнопки отправки, что инициализирует событие onsubmit. Ну а далее цикл (в функции validate): for(var i=0, k=e.length; i<k; i++) { //проверка значения полей //и каждое поле может иметь атрибут pattern описывающий условие проверки поля } Зайдите сюда там о проверке полей формы, правда под jQuery, но это не важно, важно понять принцип, а на чем написать, это уже вторичное. После этого можно и продолжить. |
как будто перегружается страница
- это как нажать на кнопку "обновить страницу" |
Часовой пояс GMT +3, время: 04:01. |