используя JQuery валидации удаленного на элемент множественного выбора - PullRequest
2 голосов
/ 11 июня 2011

Я уже некоторое время использую jquery validate и только недавно начал работать с опцией remote .

Когда я использую удаленную проверку сэлемент ввода, он отлично работает (электронная почта, телефон и т. д.).Сейчас я пытаюсь заставить его работать с элементом множественного выбора.Я не понимаю, когда проверка с помощью удаленного запускается.В первый раз, когда я делаю выбор в элементе, он запускает пульт и выполняет то, что должен делать.Затем, когда я нажимаю Ctrl, Shift или один щелчок в другом месте, он не всегда выполняет проверку и вызывает метод удаленного ajax.

<!-- HTML snippet -->
<form id="edit_user_form" action="" method="post">
    <input type="text" name="username" id="edituser_username"/><br/>
    <select name="roles" id="edituser_roles" size="5" multiple="multiple"></select>
</form>

// jquery snippet
$('#edit_user_form').validate({
    rules: {
        username: { required: true },
        roles: {
            required: true,
            remote: {
                type: "POST",
                url: "/AdminJson/CheckRolesAllowed",
                dataType: "json",
                data: {
                    roles: function () { return $("#edituser_roles").val(); }
                }
            }
        }
    },

Я также попытался установить для параметра onfocusout validate значение true, чтобывызвать проверку, когда произошло размытие.Без изменений.

Я зашел так далеко, что подключился к обработчикам событий blur и change и попробовал element , как показано ниже, ноэто тоже не сработало.

$("#edituser_roles").change(function () {
    $("#edit_user_form").validate().element("#edituser_roles");
});
$("#edituser_roles").blur(function () {
    $("#edit_user_form").validate().element("#edituser_roles");
});

У меня такой вопрос : когда вызывается удаленная проверка для элемента множественного выбора?Могу ли я заставить его проверять как размытие, так и всякий раз, когда в мультивыбор вносятся изменения?

Заранее спасибо

1 Ответ

2 голосов
/ 11 июня 2011

Я нашел ответ после отладки в jquery.validate.js.Ответ состоит из нескольких частей.

Первая часть заключается в том, что плагин validate кэширует предыдущее значение по соображениям производительности (спасибо Jörn Zaefferer за подсказку в правильном направлении - с плагином JQuery Validationхотите изменить метод удаленной проверки ).

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

Решением было очистить предыдущее значение самостоятельно визменить обработчик, как рекомендовал Йорн (рекомендуется для другой цели, но работает и здесь.)

$("#edituser_roles").change(function () {
    $("#edituser_roles").removeData("previousValue");
});

И так как я хочу, чтобы удаленная проверка выполнялась каждый раз, когда я меняю выбор (с помощью Ctrl-клик, Shift-кликили одним щелчком мыши) без необходимости размытия элемента, обработчик изменений был немного расширен до следующего:

$("#edituser_roles").change(function () {
    $("#edituser_roles").removeData("previousValue");
    $("#edit_user_form").validate().element("#edituser_roles");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...