onsubmit отправка формы
Всем привет.
Такой вопрос: Форма
<form method="post" onsubmit="if(document.getElementById('cb').value==''){alert('!!!'); return false;}">
<input id="cb" type="checkbox" />
<input type="submit" value="отправить" />
</form>
При нажатии submit отрабатывает условие в событии onsubmit, но после того как закрываю алерт-окошко данные формы все равно отправляются. Как сделать чтоб не отправлялись? |
Есть такой вариант:
<input type="button" value="Отправить" onclick="if ( … ) myform.submit(); else alert('!!!');" />
|
chelsea,
заменить if(document.getElementById('cb').value=='') на if(!document.getElementById('cb').checked) так как value = 'on' у checkbox |
похожий вопрос, поэтому решил написать в эту тему:
форма:
<form name="UserEnter" action="index.php" method="POST" onsubmit="CheckFields()">
Укажите e-mail: <input type="text" name="login" id ="login" value="" size="30" />
<?php
/*if ($userIsEmpty)
echo (" Укажите свой e-mail");*/
if (!$userIsValid)
echo (" Такой пользователь отсутствует. Пройдите процедуру регистрации!");
?>
<br/>
Укажите пароль:<input type="password" name="password" id ="password" value="" size="10" />
<?php
/*if ($passwordIsEmpty)
echo (" Укажите свой пароль");*/
if (!$passwordIsValid)
echo (" Пароль не верный!");
?>
<br/>
<input type="submit" value="Вход" />
</form>
Сама функция валидации:
function CheckFields()
{
var checklogin = false;
var checkpassword = false;
// получение элемента login
ValueLogin = document.getElementById('login');
// проверка того, что элемент login заполнен
if (ValueLogin.value !='' && ValueLogin != undefined){
checklogin = true;
// получение элемента password
ValuePassword = document.getElementById('password');
// проверка того, что элемент password заполнен
if (ValuePassword.value !='' && ValuePassword != undefined){
checkpassword = true;
// submit должен выполняться только в случае заполнения всех полей
document.forms["UserEnter"].submit();
}
else alert('Укажите пароль!');
}
else alert('Укажите свой e-mail!');
}
При нажатии submit отрабатывает условие в событии onsubmit, но после того как закрываю алерт-окошко данные формы все равно отправляются. Как сделать чтоб не отправлялись? |
Delovoy, return false установите по умолчанию
forma.onsubmit = function(){
if(1<2) return true; //проверяем условие, если все верно, то отправляем, если нет - нет.
return false;
};
|
Спасибо, monolithed!
модифицировал функцию следующим образом:
function CheckFields()
{
var checkpassword = false;
// получение элемента login
ValueLogin = document.getElementById('login');
// проверка того, что элемент login заполнен
if (ValueLogin.value !='' && ValueLogin != undefined){
// получение элемента password
ValuePassword = document.getElementById('password');
// проверка того, что элемент password заполнен
if (ValuePassword.value !='' && ValuePassword != undefined){
checkpassword = true;
}
else alert('Укажите пароль!');
}
else alert('Укажите свой e-mail!');
// submit должен выполняться только в случае заполнения всех полей
if (checkpassword) return true;
else return false;
}
но результат тот же ! submit формы происходит все равно. хотя я проверил - функция возвращает false может это связано с тем, что подключение скрипта выполнено из внешнего файла, посредством <script type="text/javascript" src="newjavascript.js"></script> ? а не непосредственно в коде, как в вашем примере ? |
Цитата:
<script type="text/javascript">
window.onload = function(){
document.forms[0].onsubmit = function(){
if(this.elements[0].value == 4) return true;
return false;
};
};
</script>
<form action="" method="post">
<input type="text" />
<input type="submit" value="ok" /> 2+2 = ?
</form>
|
файл подключен, я проверил
модифицировал форму следующим образом
<form name="UserEnter" action="index.php" method="POST" >
........................
<input type="submit" value="Вход" onclick="CheckFields()" />
</form>
и скрипт
function CheckFields()
{
var checkpassword = false;
................ // тут идет набор проверок
document.forms[0].onsubmit = function(){
if (checkpassword) return true;
else {
alert ('FALSE');
return false;
}
}
}
alert добавил, чтобы проконтролировать по какой ветке пойдет выполнение. Выполнение идет по правильной ветке, появляется сообщение "FALSE" в отдельном окне после закрытия которого, происходит перезагрузка страницы (submit) ... может этот способ не подходит для Opera 11 ? |
у меня opera 11 и пример monilithed работает как надо. Если хочешь, чтобы тебе помогли, сделай так, чтобы твой код можно было запустить прямо на форуме (js run)
|
Спасибо, всем кто участвовал! Разобрался как сделать :)
модифицировал форму следующим образом
<form name="UserEnter" id="UserEnter" action="index.php" method="POST" >
........................
<input type="button" value="Вход" onclick="CheckFields()" />
</form>
т.е. изменил тип кнопки с submit на button - чтобы убрать автоматический submit формы при нажатии сама функция:
function CheckFields()
{
var checkpassword = false;
................ // тут идет набор проверок
if (checkpassword) {
document.getElementById("UserEnter").submit();
}
}
В функции, если условие проверки выполняется - выполняю submit формы
document.getElementById("UserEnter").submit();
|
| Часовой пояс GMT +3, время: 01:12. |