Загадка onsubmit
Здравствуйте!
В попытках сделать обработку формы перед отправкой на сервер столкнулся с проблемой, которую ну никак не могу понять. Вернее будет сказать, что проблем несколько. Итак, есть вот такая форма: <form name='Registration' method="post" onsubmit="return check(this)"> //Здесь идут элементы формы (на всякий случай упомяну, что они собраны в несколько таблиц) </form> Как видно onsubmit ссылается на функцию check. Первая проблема заключается в том, что, если функция прописана во внешнем файле, то где бы и как бы на странице я не ссылался на этот файл ничего не работает. Вторая проблема интереснее. Если я внутри страницы с формой под тегом <script> пишу вот такую функцию:
function check(form) {
var name = form.login.value;
alert(name);
}
То все замечательно работает (login - одно из имен для input в форме). Я нажимаю кнопку подтверждения, получаю alert с введенным текстом и страница автоматически перезагружается. НО, если я точно так же прописываю вот такую функцию:
function check(form) {
alert('Начали!');
var login = form.login.value;
var pass = form.password.value;
var semipass = form.semiPassword.value;
var mail = form.mail.value;
......
var err = "";
if (login.length < 4) err += "Слишком короткий логин \n";
if (pass.length < 4) err += "Слишком короткий пароль \n";
if (pass != semipass) err += "Пароли не совпадают \n";
if ((mail.indexOf("@") < 0) || (mail.length < 2)) err += "Введен некорректный e-mail \n";
......
if (err != "") return false;
else return true;
}
То при прочих равных функция не срабатывает. Я даже не получаю самого первого alert'а "Начали!", который специально для того и вводил, чтобы проверить срабатывание функции. Что скажете? В чем проблема и что я не так делаю? |
Цитата:
Сделай простенький пример и покажи тут, так многое прояснится... ;) Цитата:
|
Цитата:
Вот пример подключения файла: <html> <head> <title>Регистрация аккаунта: Спектроскопия координационных соединений</title> <link rel="stylesheet" type="text/css" href="style.css"> <script type="text/javascript" src="../Script/Test.js"></script> </head> <body> ...... </body> </html> (html-файл хранится в папке Client в основной папке сайта, скрипт лежит в папке Script так же в основной папке сайта, поэтому путь прописываю таким вот образом, к слову такой вариант написания пути работает для скрипта, записанного в action) Аналогично теги <script> пытался запихнуть в саму обрабатываемую форму и в конец файла перед закрывающим <body>. Сам файл содержит только следующие строки, ничего лишнего:
function test(form) {
var name = form.login.value;
alert(name);
}
Пытался так же достучаться до формы через document.form... не пробовал, правда, через getElementById (точнее пробовал, но только сейчас понял, что ошибся и спутал id и name формы), но, как говорят, должно работать и так. Может врут? Собственно вот как выглядит html-файл сейчас:
<!DOCTYPE HTML>
<html>
<head>
<title>Регистрация аккаунта: Спектроскопия координационных соединений</title>
<link rel="stylesheet" type="text/css" href="../style.css">
<script type="text/javascript">
function check(form) {
var login = form.login.value;
var pass = form.password.value;
var semipass = form.semiPassword.value;
var mail = form.mail.value;
var surname = form.surname.value;
var name = form.name.value;
var lastname = form.lastname.value;
var day = form.day.value;
var month = form.month.value;
var year = form.year.value;
var city = form.city.value;
var org = form.organization.value;
var post = form.post.value;
var m_phone = form.m_phone.value;
var err = "";
if (login.length < 4) err += "Слишком короткий логин \n";
if (pass.length < 4) err += "Слишком короткий пароль \n";
if (pass != semipass) err += "Пароли не совпадают \n";
if ((mail.indexOf("@") < 0) || (mail.length < 2)) err += "Введен некорректный e-mail \n";
if (surname.length < 2) err += "Введите фамилию полностью \n";
if (name.length < 2) err += "Введите полное имя \n";
if ((lastname.length < 2) && (lastname.length <> 0)) err += "Введите отчество полностью \n";
if ((day.length < 2) || (month.length < 2) || (year.length < 4)) err += "Некорректно указан день рождения \n";
if (city.length = 0) err += "Не указан город \n";
if (org.length = 0) err += "Не указана организация \n";
if (post.length = 0) err += "Не указана должность \n";
if (m_phone.length = 0) err += "Укажите телефон для связи \n";
if (err != "") return false;
else return true;
}
</script>
</head>
<body>
<div id="container">
<div id="header">
<h1> <span style="border-bottom:2px solid green"> <strong>Спектроскопия координационных соединений </strong> </span> </h1>
<p class="menu" id="menu"> <!--Меню с переходом в другие разделы-->
<a href="../index.html">Главная</a>
<a href="../Registration.html">Регистрация и тезисы</a>
<a href="../Organizers.html">Организаторы</a>
<a href="../Materials.html">Материалы конференции</a>
<a href="../Place.html">Место проведения</a> <br> <br>
<a href="../History.html">История конференции</a>
<a href="../Contacts.html">Контакты</a>
</p>
<hr noshade width="100%" align="center" color="#311f84" size="3">
<p text-align="center" style="margin-bottom:5px; padding:bottom:0px">
<img src="../img/Emblem.png" height="110" width="110" style="margin-right:15px">
<img src="../img/cropped-header.jpg" height="110" width="707">
<img src="../img/Emblem.png" height="110" width="110" style="margin-left:15px">
</p>
<table id="submenu">
<tr>
<td valign="middle" width="120" style="font-size: 16px; font-style: oblique; font-weight: bold"> Мой кабинет: </td>
<td valign="middle" width="50" style="font-weight: bold"> <a href="Enter.html">Вход</a> </td>
<td valign="middle" width="740" style="font-weight: bold"> <span class="active">Регистрация</span> </td>
<td align="right"> <a href="../en/Main.html"><img src="../img/flag_en.png" height="30" width="46" title="English"></a> </td>
</tr>
</table>
</div>
<div id="content">
<p style="margin-bottom: 10px">Для прохождения регистрации заполните форму ниже:</p>
<p style="font-size: 12px"><sup>*</sup>Поля обязательные для заполнения</p>
<form name='Registration' method="post" onsubmit="return check(this)"> <!-- action="../Script/Registrate.php" -->
<!-- <script type="text/javascript" src="../Script/RegCheck.js"></script> -->
<table class="formal" style="margin-bottom: 16px">
<tr>
<td>Логин<sup>*</sup>:</td> <td><input type="text" name="login"></td>
</tr>
<tr>
<td>Пароль<sup>*</sup>:</td> <td><input type="password" name="password"></td>
</tr>
<tr>
<td>Повторите пароль<sup>*</sup>:</td> <td><input type="password" name="semiPassword"></td>
</tr>
<tr>
<td>e-mail<sup>*</sup>:</td> <td><input type="e-mail" name="mail"></td>
</tr>
</table>
<table class="formal" style="margin-bottom: 16px">
<tr>
<td>Фамилия<sup>*</sup>:</td> <td><input type="text" name="surname"></td>
</tr>
<tr>
<td>Имя<sup>*</sup>:</td> <td><input type="text" name="name"></td>
</tr>
<tr>
<td>Отчество:</td> <td><input type="text" name="lastname"></td>
</tr>
<tr>
<td>День рождения<sup>*</sup>:</td> <td>дд <input type="text" name="day" size="1" maxlength="2"> мм <input type="text" name="month" size="1" maxlength="2">
гггг <input type="text" name="year" size="2" maxlength="4"></td>
</tr>
<tr>
<td>Город<sup>*</sup>:</td> <td><input type="text" name="city"></td>
</tr>
</table>
<table class="formal" style="margin-bottom: 16px" width="">
<tr>
<td colspan="3">Ученая степень<sup>*</sup>:</td>
</tr>
<tr>
<td><input type="radio" name="degree" value="none" checked>нет</td>
<td><input type="radio" name="degree" value="PhD">кандидат наук</td>
<td><input type="radio" name="degree" value="PhD+">доктор наук</td>
</tr>
<tr>
<td colspan="3">Ученое звание<sup>*</sup>:</td>
</tr>
<tr>
<td><input type="radio" name="title" value="none" checked>нет</td>
<td><input type="radio" name="title" value="asProf">доцент</td>
<td><input type="radio" name="title" value="Prof">профессор</td>
</tr>
<tr>
<td><input type="radio" name="title" value="academ">академик</td>
<td><input type="radio" name="title" value="corresp">член-корреспондент</td>
</tr>
</table>
<table class="formal">
<tr>
<td>Организация<sup>*</sup>:</td> <td><input type="text" name="organization"></td>
</tr>
<tr>
<td>Должность<sup>*</sup>:</td> <td><input type="text" name="post"></td>
</tr>
<tr>
<td>Рабочий телефон:</td> <td><input type="text" name="w_phone"></td>
</tr>
<tr>
<td>Мобильный телефон<sup>*</sup>:</td> <td><input type="text" name="m_phone"></td>
</tr>
</table>
<br>
<input type="submit" value="Регистрация"> <input type="reset" value="Очистить">
</form>
</div>
</div>
</body>
</html>
action и ссылку на файл с основным скриптом (который сейчас вписан в head) закомментировал, чтобы пока не мешались. Такой вариант работает, хотя если вставить между тегами скрипт короткий тестовый вариант (указан выше, как пример отдельного файла), то все замечательно. |
Цитата:
Отладчик покажет чего у вас накосячено. |
Цитата:
|
Цитата:
|
Цитата:
Вот tmp.html <!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='tmp.js'></script> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> </script> </head> <body> <button onclick='test();'>Test</button> </body> </html> Это tmp.js
function test(){
alert('Ok');
};
У меня все работает, если этот текст превратить в файлы и разместить в одном каталоге... :) |
Всем спасибо. Не знаю, что я делал не так, но заработал и подсоединенный внешний файл и сам код.
Как выяснилось код не работал из-за одной строчки: if ((lastname.length < 2) && (lastname.length <> 0)) err += "Введите отчество полностью \n"; Привычка от паскаля обозначать не равно как <>. Все исправил. |
в этом учебнике есть регэксп для валидности email
var regexpemail = /^\s*[a-z0-9!$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]{2,4}|museum)\s*$/i; if (value.search(regexpemail) == -1)) \\ошибка кстати я сам для себя написал небольшую функцию которая исправляет домены на популярные, так как пользователи часто ошибаются и пишут с ошибкой слово yandex или вместо mail.ru - mail.com но javascript в любом случае только для удобства юзера, а на всякие там уязвимости надо проверять на сервере если у тебя что-то не работает первым делом в консоль браузера смотри, а не сюда пиши паскальщик загадочник |
| Часовой пояс GMT +3, время: 11:23. |