проверка формуляра на корректность заполнения
Добрый вечер,
У меня всего два поля: имя и емеил. Проверка формуляра работает некорректно. До тех пор пока не введется имя, емеил не проверяется. Хотелось бы сделать так, чтобы, когда запускалась функция проверки при нажатии на кнопку ок,имя и емеил проверялись одновременно. Как это можнл сделать? function check(form){ if(form.name.value.length<1){ alert("Введиье имя!"); return false; } email=form.email.value; if (email.indexOf("@")==-1 || email.indexOf("@")<1 || email.lastIndexOf(".")>email.length-3 || email.lastIndexOf(".")<email.length-5){ alert("Неправильный e-postadress!"); return false; } return true; } <form onSubmit="return check(this)" action="thanks.html"> <fieldset> <legend>Введите данные</legend> <p>Name: <input name="name" type="text" id="name"></p> <p>E-mail: <input name="email" type="text" id="email"></p> <input type="submit" value="Ok" id="submit"> </fieldset> </form> |
sana,
сделайте 1 return в функции а не три как сейчас |
Цитата:
function check(form){ if(form.name.value.length<1){ alert("Введите имя!"); } if (form.email.value.indexOf("@")==-1 || email.indexOf("@")<1 || email.lastIndexOf(".")>email.length-3 || email.lastIndexOf(".")<email.length-5){ alert("Неправильный e-postadress!"); } return false; } |
Харе тупить, функция проверки должна возвращать или коды проверки или мессагу с результатом проверки.
|
function isvalid(el){ var log=[]; if(el.name.value.trim().length<1) log.push("Короче, имя не должно быть короче 1 буквы"); if(el.email.value.indexOf("@")==-1) log.push('И имейла без собаки не бывает'); if(log.length) { alert( log.join('<br>')); return false; } else return true; } в нажатии кнопки return isvalid(this.form); // если вернется фолс - событие не проканает, а если тру - проканает дальше и форма отправится |
sana,
:( <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> function check(form) { var ok = true; if (form.name.value.length < 1) { alert("Введите имя!"); ok = false; } var email = form.email.value; if (email.indexOf("@") == -1 || email.indexOf("@") < 1 || email.lastIndexOf(".") > email.length - 3 || email.lastIndexOf(".") < email.length - 5) { alert("Неправильный e-postadress!"); ok = false; } return ok; } </script> </head> <body> <form onSubmit="return check(this)" action="thanks.html"> <fieldset> <legend>Введите данные</legend> <p>Name: <input name="name" type="text" id="name"></p> <p>E-mail: <input name="email" type="text" id="email"></p> <input type="submit" value="Ok" id="submit"> </fieldset> </form> </body> </html> |
Для имейлов применяют вот такой паттерн
^[^\s@]+@[^\s@]+\.[^\s@]+$ пишите его прямо в атрибут pattern="^[^\s@]+@[^\s@]+\.[^\s@]+$" и там можно либо встроенную валидацию формы заюзать, либо уже в цикле прогнать скриптом все найденные поля. А чтобы и сообщения об ошибках не хранить в скрипте, так же в атрибут data-err="Короче, имя не должно быть короче 1 буквы" можно записать. То есть примерно так for(var i=0,inputs=form.elements,inp,log=[];inp=inputs[i];i++) if(!new RegExp(inp.getAttribute('pattern')).test(inp.value) log.push(inp.getAttribute('data-err')); Ну далее по месту. То есть это будет вся валидация для любого количества полей в форме при условии что у всех у них есть паттерн с регой и дата-ерр |
кроме файлов, конечно. с файлами - геморрой капец.
Регами и на минимальную длину все проверяется. Например имя или там фамилия. Да, form.elements подгребет и все кнопки. Надо проверять чтоб не кнопка или не делать кнопки, а нарисовать обычный <a>Отправить</a> Да и возвращать ничего не надо в случае когда валидация идет по нажатию кнопки. Это когда по вводу. А когда кнопка уже нажата то если лог ошибок не пустой - form.submit() и все. Точнее зависит от реализации. Если инлайн профтыкали типа onsubmit="isvalid(this)" то вернув false отмените событие. А если забиндили <a> через addEventListener и нашли форму, то деваться некуда - надо ее отправлять form.submit() |
Переписала код, но есть неточность. Если поле с емейлом указано верно, а поле с именем не заполнено, то данные отправляются. Если же емеил и имя указаны некорректно,то появляется окно с указанием ошибок. Что не так?
function check(form) { var nameIsOk = true; var emailIsOk = true; var errorMsg = ""; if (form.name.value.length < 1) { errorMsg += "забыл имя"; nameIsOk = false; } var email = form.email.value; var atPos = email.indexOf("@"); var lastDotPos = email.lastIndexOf("."); if (email.length == 0) { if (!nameIsOk) { errorMsg += "\n"; } errorMsg += "забыл email!"; emailIsOk = false; } else if (email.length < 6 || atPos == -1 || atPos != email.lastIndexOf("@") || atPos < 1 || lastDotPos <= atP + 1 || lastDotPos + 2 >= email.length) { emailIsOk = false; if (!nameIsOk) { errorMsg += "\n"; } errorMsg += "Email '" + email + "' некорректный адрес. "; } if (!nameIsOk || !emailIsOk) { alert(errorMsg); return false; } return true; } |
sana,
строка 25 |
Часовой пояс GMT +3, время: 11:46. |