jquery validator — проверка только видимых элементов

У меня есть переключатель, который скрывает/показывает div. Все видимые элементы являются "обязательными", но добавление ignore: ":hidden" после правил проверки не работает... Вот код:

<script type="text/javascript">

        $(document).ready(function(){
            $("#myForm").validate({
                rules: {
                    name: "required",
                    age: "required",
                    height: "required",
                    ignore: ":hidden"
                }
            })
        });

    </script>
</head>
<body>
    <form id="myForm" name="myForm" method="post" action="" >
        <input type="radio" name="checkAge" value="adult" onclick="$('#minorRequisites').hide();" />Adult<br/>
        <input type="radio" name="checkAge" value="minor" onclick="$('#minorRequisites').show()" checked="checked"/>Child<br/>
        Name <input id="name" name="name" type="text" /><br/>
        <div id="minorRequisites">
            Age <input id="age" name="age" type="text" /><br/>
            Height <input id="height" name="height" type="text" /><br/>
        </div>
        <input type="submit" />
    </form>
</body>

I want to be able to submit the form giving only name if "Adult" is checked... Any ideas? :)


person Caveman    schedule 08.09.2011    source источник


Ответы (2)


Вы можете указать выражения зависимостей в своих required правилах, чтобы они игнорировались элементы, если они не видны:

$("#myForm").validate({
    rules: {
        name: "required",
        age: {
            required: "#age:visible"
        },
        height: {
            required: "#height:visible"
        }
    }
});

Вы можете увидеть результаты в этой скрипте.

EDIT: ignore также будет работать, но это опция, а не правило, поэтому вы должны написать:

$("#myForm").validate({
    ignore: ":hidden",
    rules: {
        name: "required",
        age: "required",
        height: "required"
    }
});
person Frédéric Hamidi    schedule 08.09.2011
comment
@Caveman, это потому, что ignore - это вариант, а не правило. Я обновлю свой ответ. - person Frédéric Hamidi; 09.09.2011
comment
ааа! Это было все равно, что поставить ';' в конце for и удивляясь, почему это не работает... Большое спасибо! :) - person Caveman; 12.09.2011

Пожалуйста, попробуйте ignore: ":not(:visible)" вместо ignore: ":hidden".

person impactaweb    schedule 05.10.2016