Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Валидация скрытого поля формы (https://javascript.ru/forum/dom-window/59154-validaciya-skrytogo-polya-formy.html)

sashgera 30.10.2015 01:18

Валидация скрытого поля формы
 
Здравствуйте
Есть форма - два поля, одно из них скрывается/показывается радиобаттонами.
Также есть валидация формы на пустое поле и условие - если див, в котором находится поле скрыт, то это поле не проверять (и соответственно проверять, если див показан):
if(document.getElementById('vm_myadres_input').style.display == ''){//если див скрыт - не проверяем

Проблема заключается в следующем - если див (в нем поле) сначала скрыть, а потом показать, то в див вставляется style="display: block;"
По условию валидации поле не скрыто и должно проверяться на пустое поле, но этого не происходит. Проверить поле не дает display: block;

Как решить проблему?
Вот пример: http://www.glassbus.ru/Untitled-26.html

<div id="err_userfields" class="err_valid" style="color:red; font-weight:bold;"></div>

<form action="index.php" method="post">
<input name="shipping_rate_id" id="zzz1" value="1" type="radio"> Самовывоз <em>(поле Адрес будет скрыто)</em><br>
<input name="shipping_rate_id" id="zzz2" value="2" type="radio"> Доставка по Москве <em>(поле Адрес будет показано)</em><br><br>

<div class="formField" id="vm_myname_input">
  <input id="vm_myname_field" name="vm_myname" value="" class="inputbox" type="text"> Имя
</div>
<br>       
<div class="formField" id="vm_myadres_input">
 <input id="vm_myadres_field" name="vm_myadres" value="" class="inputbox" type="text"> Адрес
</div>
<br>       
<input id="submit-form" type="submit" value="Оформить заказ" onclick="javascript: return(submitregistration());" />
</form>

<script type="text/javascript">
function submitregistration(){
//Проверка поля имя
if(document.getElementById('vm_myname_field').value == "") {//проверка на пустое поле
  document.getElementById('err_userfields').innerHTML = 'Заполните поле Имя';
  return false;	
};		
//Проверка поля Адрес 
if(document.getElementById('vm_myadres_input').style.display == ''){//если див скрыт - не проверяем !!!ЗДЕСЬ ЗАСАДА!!!		
  if (document.getElementById('vm_myadres_field').value=="") {//проверка на пустое поле
    document.getElementById('err_userfields').innerHTML = 'Заполните поле Адрес';
	return false;	
  };
};
 	
return true;
};
</script>

<script type="text/javascript">
$("input").click(function(){
  if ($("input:checked").val() == "1") {
    $("#vm_myadres_input").hide();
  }
  else
    $("#vm_myadres_input").show();
});
</script>

рони 30.10.2015 02:30

sashgera,
<!DOCTYPE HTML>

<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">

    </style>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script>
        $(function() {
            $('[name="shipping_rate_id"]').click(function() {
                $("#vm_myadres_input").toggle(this.value == 2);
            })
            $('form').submit(function() {
                var text = '',
                    val = $.trim($('#vm_myname_field').val());
                if (!val) {
                    text += ' <br>Заполните поле Имя '
                }
                val = $.trim($('#vm_myadres_field').val())
                if (!val && $('#vm_myadres_field').is(':visible')) {
                    text += ' <br>Заполните поле Адрес '
                }
                $('#err_userfields').html(text)
                return !text
            })
        });
    </script>
</head>

<body>
    <div id="err_userfields" class="err_valid" style="color:red; font-weight:bold;"></div>
    <form action="index.php" method="post">
        <input name="shipping_rate_id" id="zzz1" value="1" type="radio"> Самовывоз <em>(поле Адрес будет скрыто)</em>
        <br>
        <input name="shipping_rate_id" id="zzz2" value="2" type="radio"> Доставка по Москве <em>(поле Адрес будет показано)</em>
        <br>
        <br>

        <div class="formField" id="vm_myname_input">
            <input id="vm_myname_field" name="vm_myname" value="" class="inputbox" type="text"> Имя
        </div>
        <br>
        <div class="formField" id="vm_myadres_input">
            <input id="vm_myadres_field" name="vm_myadres" value="" class="inputbox" type="text"> Адрес
        </div>
        <br>
        <input id="submit-form" type="submit" value="Оформить заказ" />
    </form>


</body>

</html>

sashgera 30.10.2015 02:47

рони, спасибо, работает! А можно валидацию формы без jquery? Или укажите на ошибку - почему не срабатывает условие
if(document.getElementById('vm_myadres_input').style.display == ''){

рони 30.10.2015 09:20

form validate js
 
sashgera,
если div скрыт display = 'none'
поэтому условие на видимость

if(document.getElementById('vm_myadres_input').style.display != 'none')
при условии установки none програмно или в атрибуте style, потому что кроме '' есть и значения по умолчанию типа 'auto'
<!DOCTYPE HTML>

<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
window.addEventListener("DOMContentLoaded", function() {
    var radio = document.querySelectorAll('[name="shipping_rate_id"]'),
        visible = true,
        div = document.querySelector("#vm_myadres_input"),
        myadres = document.querySelector("#vm_myadres_field"),
        form = document.querySelector("form"),
        myname = document.querySelector("#vm_myname_field"),
        err = document.querySelector("#err_userfields");
    [].forEach.call(radio, function(item, i) {
        item.addEventListener("click", function() {
            visible = this.value == 2;
            div.style.display = visible ? "" : "none"
        })
    });
    form.addEventListener("submit", function(event) {
        var text = "",
            val = myname.value.replace(/\s+/g, "");
        if (!val) text += " Заполните поле Имя <br>";
        val = myadres.value.replace(/\s+/g, "");
        if (!val && visible) text += " Заполните поле Адрес ";
        text && event.preventDefault();
        err.innerHTML = text;
        return !text
    }, false)
});
    </script>
</head>

<body>
    <div id="err_userfields" class="err_valid" style="color:red; font-weight:bold;"></div>
    <form action="index.php" method="post" >
        <input name="shipping_rate_id" id="zzz1" value="1" type="radio"> Самовывоз <em>(поле Адрес будет скрыто)</em>
        <br>
        <input name="shipping_rate_id" id="zzz2" value="2" type="radio"> Доставка по Москве <em>(поле Адрес будет показано)</em>
        <br>
        <br>

        <div class="formField" id="vm_myname_input">
            <input id="vm_myname_field" name="vm_myname" value="" class="inputbox" type="text"> Имя
        </div>
        <br>
        <div class="formField" id="vm_myadres_input">
            <input id="vm_myadres_field" name="vm_myadres" value="" class="inputbox" type="text"> Адрес
        </div>
        <br>
        <input id="submit-form" type="submit" value="Оформить заказ" />
    </form>


</body>

</html>

sashgera 30.10.2015 15:26

рони, спасибо!


Часовой пояс GMT +3, время: 23:40.