Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   onsubmit отправка формы (https://javascript.ru/forum/misc/11962-onsubmit-otpravka-formy.html)

chelsea 23.09.2010 14:43

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, но после того как закрываю алерт-окошко данные формы все равно отправляются. Как сделать чтоб не отправлялись?

exec 23.09.2010 15:02

Есть такой вариант:

<input type="button" value="Отправить" onclick="if ( … ) myform.submit(); else alert('!!!');" />

рони 24.09.2010 02:53

chelsea,
заменить if(document.getElementById('cb').value=='') на if(!document.getElementById('cb').checked) так как value = 'on' у checkbox

Delovoy 13.01.2011 10:53

похожий вопрос, поэтому решил написать в эту тему:
форма:
<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, но после того как закрываю алерт-окошко данные формы все равно отправляются. Как сделать чтоб не отправлялись?

monolithed 13.01.2011 11:07

Delovoy, return false установите по умолчанию

forma.onsubmit = function(){
      if(1<2) return true; //проверяем условие, если все верно, то отправляем, если нет - нет.
      return false;
};

Delovoy 13.01.2011 11:45

Спасибо, 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> ?
а не непосредственно в коде, как в вашем примере ?

monolithed 13.01.2011 15:33

Цитата:

Сообщение от Delovoy
может это связано с тем, что подключение скрипта выполнено из внешнего файла, посредством
<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>

Delovoy 13.01.2011 18:08

файл подключен, я проверил

модифицировал форму следующим образом
<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 ?

x-yuri 13.01.2011 19:35

у меня opera 11 и пример monilithed работает как надо. Если хочешь, чтобы тебе помогли, сделай так, чтобы твой код можно было запустить прямо на форуме (js run)

Delovoy 14.01.2011 10:40

Спасибо, всем кто участвовал! Разобрался как сделать :)

модифицировал форму следующим образом

<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, время: 03:42.