Проверка jQuery ТОЛЬКО при выборе определенных переключателей - PullRequest
4 голосов
/ 17 марта 2011

У меня есть простой бит проверки в моей форме:

<script type="text/javascript">

                    $(function()
                    {
                        $("#postform").validate({
                            rules: {
                                post_title: "required",
                                post_url: "required",
                                post_code: "required",
                                post_content: "required",
                                post_tags: "required"
                            }
                        });
                    });

                    </script>

НО я не хочу требовать post_url или post_code, если некоторые переключатели не отмечены, так как они скрыты, когда я их выбираю.например, вот радио:

<li><label for="r1"><input type="radio" name="post_category" id="r1" value="12" checked="checked" /> Share an Article</label></li>
                                    <li><label for="r4"><input type="radio" name="post_category" id="r4" value="14" /> Share a Link</label></li>
                                    <li><label for="r3"><input type="radio" name="post_category" id="r3" value="13" /> Share some Code</label></li

, а затем это код jquery, который скрывает или показывает их:

<script type="text/javascript">

    jQuery(document).ready(function($)
    {
        $("input[name='post_category']").change(function()
        {
                $("#discussion-label").toggle(this.value == "12");
        });
        $("input[name='post_category']").change(function()
        {
                $("#code-container").toggle(this.value == "13");
                $("#code-label").toggle(this.value == "13");
        });
        $("input[name='post_category']").change(function()
        {
                $("#link-container").toggle(this.value == "14");
                $("#link-label").toggle(this.value == "14");
        });

        $("input#r1:checked").change();
        $("input#r3:checked").change();
        $("input#r4:checked").change();
    });

</script>

Таким образом, идея заключается в том, что когда пользователь выбирает только первый переключательpost_title, post_content и post_tags будут проверены.Если пользователь выберет вторую радиокнопку, он ТАКЖЕ проверит поле post_url, если он выберет третью радиокнопку, он проверит поле post_code, НО больше post_url, и наоборот.?Спасибо

1 Ответ

12 голосов
/ 17 марта 2011

Вы можете выполнить условную проверку, используя объект со значением «зависящий» вместо строки «требуется» для объекта проверки, например:

$("#postform").validate({
    rules: {
        post_title: "required",
        post_url:  {
            required: {
                depends: function() {
                    return $('input[name=post_category]:checked').val() == '14';
                }
            }
        },
        post_code: {
            required: {
                depends: function() {
                    return $('input[name=post_category]:checked').val() == '13';
                }
            }
        },
        post_content: "required",
        post_tags: "required"
    }
});

Функция автоматически используется для проверкирамки для проверки необходимости проверки.Если функция возвращает true, она будет проверена, в противном случае - нет.В этом случае каждая функция находит, какая из радиостанций проверена, и затем сравнивает значение этой радиостанции со значением, которое нам необходимо для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...