ASP.NET удаленной проверки только на размытие? - PullRequest
11 голосов
/ 23 марта 2011

Я использую удаленную проверку в MVC 3, но, похоже, она срабатывает каждый раз, когда я что-то печатаю, если поле было активным во второй раз.Проблема в том, что у меня есть поле автозаполнения, поэтому они могут щелкнуть по результату, чтобы заполнить поле, которое MVC рассматривает как «оставив» его.попытаться подтвердить, когда они на полпути через письмо.Есть ли способ, которым я могу сказать: «запускать проверку только через миллисекунды после того, как они закончили печатать» или «только выполнять проверку при размытии?»

Ответы [ 4 ]

19 голосов
/ 23 марта 2011

MVC 3 опирается на плагин jQuery Validation для проверки на стороне клиента. Вам необходимо настроить плагин так, чтобы он не проверялся при активации ключа.

Вы можете отключить его глобально, используя

$.validator.setDefaults({
   onkeyup: false
})

См. http://docs.jquery.com/Plugins/Validation/Validator/setDefaults и параметр onkeyup здесь http://docs.jquery.com/Plugins/Validation/validate.

2 голосов
/ 24 февраля 2012

Для дальнейшего использования я обнаружил, что это можно сделать в сочетании с плагином typeWatch (http://archive.plugins.jquery.com/project/TypeWatch).

В основном, что вы хотите сделать, это (в моем случае для пули):

/*Disable keyup validation on focus and restore it to onkeyup validation mode on blur*/
$("form input[data-val-remote-url]").on({
    focus: function () {
        $(this).closest('form').validate().settings.onkeyup = false;
    },
    blur: function () {
        $(this).closest('form').validate().settings.onkeyup = $.validator.defaults.onkeyup;
    }
});

$(function () {
    /*Setup the typeWatch for the element/s that's using remote validation*/
    $("#Slug").typeWatch({ wait: 300, callback: validateSlug, captureLength: 5 });
});

function validateSlug() {
    /*Manually force revalidation of the element (forces the remote validation to happen) */
    var slug = $("#Slug");
    slug.closest('form').validate().element(slug);
}

Если вы используете плагин vanilla typeWatch, вам придется настроить typeWatch для каждого элемента, потому что обратный вызов typeWatch не дает вам доступ к текущему элементу через $ (this), он только передает значение.

В качестве альтернативы вы можете изменить плагин typeWatch для передачи элемента (timer.el), а затем применить задержку ко всем.

0 голосов
/ 08 марта 2019

По какой-то причине (возможно, из-за конфликтов с ненавязчивым плагином) ответ hwiechers не сработал для меня.Вместо этого мне пришлось получить валидатор моей формы с .data('validator') (как уже упоминалось в этом ответе ) и установить onkeyup на false.

0 голосов
/ 05 октября 2012

У нас возникла та же проблема с выделением текстового поля автозаполнения «DealingWithContactName» при появлении списка предложений автозаполнения. Здесь мы выбираем динамически генерируемый элемент списка автозаполнения, по которому пользователь щелкает, и устанавливаем на нем фокус. Через 50 мс мы вынимаем фокус из текстового поля. Это решило нашу проблему.

$('body').on('click', 'ul.ui-autocomplete li a', function () {

        $('#DealingWithContactName').focus();

        window.setInterval(function () {
            $('#DealingWithContactName').blur();
        }, 50);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...