Плагин проверки JQuery показывает сообщение проверки слишком рано - PullRequest
2 голосов
/ 21 мая 2011

У меня есть форма поиска, где отображаются различные группы флажков в зависимости от того, что пользователь выбирает в раскрывающемся списке.Я хочу использовать плагин проверки jQuery, чтобы проверить, что пользователь (а) выбрал что-то в раскрывающемся списке и (б) установил хотя бы один флажок.

Я получил это на работу, за исключением того, что сообщение проверки для флажков ведет себя странно.Пользователь может выбрать значение в раскрывающемся списке без проблем, но, когда пользователь нажимает что-нибудь на странице (даже в пустой области), отображается сообщение об ошибке проверки для флажков.Кто-нибудь знает, что может быть причиной этого?

Вот мой код JS для плагина проверки.Я решил, что все сообщения проверки должны отображаться рядом с раскрывающимся списком (который имеет имя = 'to'), а не рядом с флажками (у всех из которых есть class = 'from_checkbox').

$(document).ready(function(){
    // Method for verifying that at least one checkbox has been checked
    jQuery.validator.addMethod("atLeastOneChecked", function(value, element, params) { 
        return $('.from_checkbox:checked').length > 0; 
    }, jQuery.format("From?"));

    // Tell jQuery validation plugin to validate the search form with the proper rules
    $("#search_form").validate({
        rules: {
            'to': { 
                required: true, 
                atLeastOneChecked: true
            }
        }, 
        messages: {
            'to': {
                required: "To?"
            }
        }
    });
});

Большая часть HTML генерируется php, но вывод выглядит примерно так:

<form action="results.php" method="post" id="search_form">
    <table>
        <tr>
            <td>Destination</td>
            <td>
                <select name="to" onchange='changeFromDiv(options[selectedIndex].value)'>
                    <option disabled="disabled" selected value="">--select--</option>
                    <option value="1">Country 1</option>
                    <option value="2">Country 2</option>
                </select>
            </td>
        </tr>
        <tr>
            <td colspan="2" id="from_label">Which cities can you travel from?</td> 
        </tr>
        <tr>
            <td colspan="2">
                <div style="display:none" class="from_div" id="from_1">
                    <input name="from[3]" type="checkbox" value="3" class="from_checkbox" /> City 3<br />
                    <input name="from[4]" type="checkbox" value="4" class="from_checkbox" /> City 4<br />
                    <input name="from[8]" type="checkbox" value="8" class="from_checkbox" /> City 8<br />
                </div>
                <div style="display:none" class="from_div" id="from_2">
                    <input name="from[1]" type="checkbox" value="1" class="from_checkbox" /> City 1<br />
                    <input name="from[6]" type="checkbox" value="6" class="from_checkbox" /> City 6<br />
                </div>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" id="submit_button" value="Find best route" onclick="showLoading()" />
            </td>
        </tr>
    </table>
</form>

1 Ответ

2 голосов
/ 21 мая 2011

Когда вы инициализируете плагин, просто включите параметр для «onfocusout»:

$("#search_form").validate({
    rules: {
        'to': { 
            required: true, 
            atLeastOneChecked: true
        }
    }, 
    messages: {
        'to': {
            required: "To?"
        }
    },
    onfocusout: false
});

, который скажет плагину не выполнять проверки правильности событий «размытия» от вовлеченных элементов.Он будет ждать, пока форма не будет отправлена.Также есть флаг «onkeyup», который, вероятно, не относится к вам, поскольку вы не работаете с текстовыми вводами.

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