Ненавязчивая проверка jQuery в .NET MVC 3 - отметка успеха - PullRequest
8 голосов
/ 21 сентября 2011

Использование ненавязчивой проверки jQuery в проекте .NET MVC, и это, кажется, работает нормально.Сейчас я пытаюсь показать зеленую галочку, когда поле проверяется правильно (на стороне клиента и / или удаленно).

Вот пример объявления поля:

    <div class="clearfix">
        @Html.LabelFor(model => model.Address1, "Street")
        <div class="input">
            @Html.TextBoxFor(model => model.Address1, new { @class = "xlarge", @maxlength = "100", @placeholder = "e.g. 123 Main St" })
            <span class="help-message">
                @Html.ValidationMessageFor(model => model.Address1)
                <span class="isaok">Looks great.</span> 
            </span>
            <span class="help-block">Enter the street.</span>
        </div>
    </div>

Что бы янравится делать, это добавить класс «активный» к «span.isaok», который, в свою очередь, имеет галочку для фонового изображения.

Я пытался использовать подсветку / неяркость:

$.validator.setDefaults({
onkeyup: false,

highlight: function (element, errorClass, validClass) {
    $(element).addClass(errorClass).removeClass(validClass);
    $(element.form).find("label[for=" + element.id + "]").addClass("error");
    $(element).parent().find("span.isaok").removeClass("active");
},
unhighlight: function (element, errorClass, validClass) {
    $(element).removeClass(errorClass).addClass(validClass);
    $(element.form).find("label[for=" + element.id + "]").removeClass("error");
    if ($(element).val().length > 0) {
        $(element).parent().find("span.isaok").addClass("active");
    }
}

});

но это показывает зеленую галочку для всех полей, даже если они пусты!(следовательно, очевидно, неправильно)

Затем я попытался использовать опцию «success», но это никогда не срабатывало.

Чего мне не хватает?

Редактировать: Итак, я нашел это сообщение в блоге и смог воспользоваться функцией успеха, т.е.

$(function () {
    var settings = $.data($('form')[0], 'validator').settings;
    settings.onkeyup = false;
    settings.onfocusout = function (element) { $(element).valid(); };

    var oldErrorFunction = settings.errorPlacement;
    var oldSuccessFunction = settings.success;
    settings.errorPlacement = function (error, inputElement) {
        inputElement.parent().find("span.isaok").removeClass("active");
        oldErrorFunction(error, inputElement);
    };
    settings.success = function (label) {
        var elementId = '#' + label.attr("for");
        $(elementId).parent().find("span.isaok").addClass("active");
        oldSuccessFunction(label);
    };
});

, но теперь, если форма недействительна, она отображает как сообщение об ошибке, так и действительный знак ...

On submit

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

On clicking on the page

Ответы [ 3 ]

2 голосов
/ 04 марта 2013

Похоже, это проблема с jquery.validate.unobtrusive, мешающим настройкам, добавленным позже в $.validator.setDefault.Хитрость заключается в том, чтобы загрузить ненавязчивый скрипт после пользовательских настроек.См. здесь и проголосуйте, чтобы исправить это здесь .

1 голос
/ 10 ноября 2011

В случае, если у кого-то есть подобная проблема, я, наконец, получил эту работу, используя неминифицированную версию jquery.validate.unobtrusive.js и добавив мои js в методы onError и onSuccess. Существующий код был оставлен как есть. Используйте повторно свернутую версию во время развертывания.

Спасибо.

0 голосов
/ 03 апреля 2013

Это не прямой ответ на ваш вопрос.Я собираюсь предложить альтернативный подход к этому: TwitterBootstrapMVC .

С этой библиотекой все, что вам нужно будет написать для каждого ввода:

@Html.Bootstrap().ControlGroup().TextBoxFor(m => m.Address1)

Ивот и все.Вы будете иметь метку, ввод и сообщение проверки - все позаботятся, без JavaScript.Он генерирует правильную HTML-разметку для вас.Вам просто нужно убедиться, что у вас есть соответствующие стандартные CSS для таких классов, как .field-validation-error, .field-validation-valid ...

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