пользовательская проверка JQuery и ненавязчивый JavaScript - PullRequest
4 голосов
/ 25 марта 2011

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

У меня есть следующее - это не работает, и я не уверен, почему.

также я не понимаю ненавязчивую часть Может кто-нибудь показать мне, как это сделать, поскольку я вижу другие примеры на SO, которые имеют это.

в текстовой области есть класс «заметка» форма называется "noteform"

  <script type="text/javascript" >
        $(document).ready(function () {


        $.validator.addMethod('nohtml', function (value, element) {
            var text = $(".note").text();
            if ($(text).length > 0) {
                return false;
            }
            else {
                return true;
            }
        }, 'Html not allowed');

    //    // **not sure what to do here**
    //    $.validator.unobtrusive.adapters.add('containsnohtml', {}, function (options) {
    //        options.rules['nohtml'] = false;
    //        options.messages['nohtml'] = options.message;
    //    });

        $('#noteform').validate({
            rules: { nohtml: "required nohtml" }
        });

    });

</script>

Ответы [ 2 ]

13 голосов
/ 15 июля 2011

Здесь есть пара вопросов. Во-первых, вы пытаетесь смешать ненавязчивую и регулярную проверку jquery. Если вы хотите использовать проверку таким образом, вам нужно убедиться, что jquery.validate.unobtrusive.js НЕ включено. Это связано с тем, что jquery.validate.unobtrusive.js автоматически анализирует и создает валидатор для документа, и самое первое, что делает validate, - проверяет, существует ли валидатор, и завершает работу, если таковой имеется.

Если вы решите пойти по ненавязчивому маршруту, не используйте $.validator.unobtrusive.adapters.add, так как это приведет к ошибке без jquery.validate.unobtrusive.js.

Я бы порекомендовал пойти с ненавязчивой проверкой, так как я думаю, что вы используете MVC3. Если вы собираетесь использовать ненавязчивую проверку, у вас есть два варианта, установите атрибуты data- * самостоятельно, добавив data-val="true" data-val-nohtml="Html not allowed" к своей текстовой области, как предложено JohnnyO, и добавив диапазон с data-valmsg-for="note" data-valmsg-replace="true", чтобы показать сообщение об ошибке. Или вы можете создать свой собственный атрибут DataAnnotation.

Вот код для addMethod (необходим для обоих видов проверки)

 <script type="text/javascript">
     (function ($) {
            $.validator.addMethod('nohtml', function (value, element) {
                // Test 'value' for html here. 'value' is the value of the control being validated.
                return true; // Return true or false depending on if it passes or fails validation, respectively.
            }, 'Html not allowed');

        } (jQuery));
    </script>

и javascript, необходимый для ненавязчивого, выглядит следующим образом:

$.validator.unobtrusive.adapters.addBool('nohtml');

Относительно того, как сделать пользовательский атрибут проверки, так как я не уверен, какой язык вы используете, если вы используете MVC3, или если вам даже нужна эта информация через 4 месяца после того, как вы спросили, я собираюсь просто оставить эти ссылки для справки.

Краткое сравнение традиционной и ненавязчивой проверки JavaScript в MVC 3 - блог Митчелла Трента
Пользовательская проверка ASP.NET MVC 3 - Microsoft Developer Network

0 голосов
/ 25 марта 2011

Хотя я не проверял это, я думаю, что все, что вам не хватает, это подключить элемент, который вы хотите проверить, с правилом nohtml.Примерно так:

$('textarea.note').rules('add', {
  nothml: true
});

Исходя из некоторых ваших описаний, я предполагаю, что вы используете ASP.NET MVC3.В этом случае вам нужно будет использовать ненавязчивый адаптер только в том случае, если вы генерируете атрибуты проверки на стороне сервера в своем HTML-элементе (например, <textarea data-val="true" data-val-nohtml="Html not allowed"></textarea>).В таком случае вам понадобится ненавязчивый адаптер для подключения элемента к правилу nohtml.

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