Загадка 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, время: 08:19. |