自定义jquery验证和不引人注目的JavaScript

rak*_*los 4 javascript validation jquery jquery-validate

我正在尝试编写一个自定义验证,如果在提交表单时textrea中存在html,则会产生错误.

我有以下 - 它不工作,我不知道为什么.

我也不明白这个不引人注目的部分可以告诉我如何做到这一点,因为我正在看到有关它的其他例子.

文本区域有一个"注释"类,该表单称为"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>
Run Code Online (Sandbox Code Playgroud)

MHo*_*lis 14

这里有几个问题.一个是你试图混合不引人注目和常规的jquery验证.如果你想使用这样的验证,那么你需要确保jquery.validate.unobtrusive.js不包括在内.这是因为jquery.validate.unobtrusive.js自动解析并生成文档的验证器,并且首先validate要检查是否存在现有验证器,如果有,则退出.

如果您决定采用非不显眼的路线,请务必不要使用,$.validator.unobtrusive.adapters.add否则会导致错误jquery.validate.unobtrusive.js.

因为我认为你正在使用MVC3,所以我建议使用不引人注目的验证.如果您要进行不显眼的验证,您有两个选择,通过添加data-val="true" data-val-nohtml="Html not allowed"到JohnnyO建议的textarea并自己设置data-*属性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>
Run Code Online (Sandbox Code Playgroud)

并且不引人注目的javascript如下

$.validator.unobtrusive.adapters.addBool('nohtml');
Run Code Online (Sandbox Code Playgroud)

关于如何制作自定义验证属性,因为我不确定你正在使用什么语言,假设你正在使用MVC3,或者你甚至在问了4个月之后甚至还需要这些信息,我只想离开这些链接供参考.

MVC 3中传统与不引人注意的JavaScript验证的简要比较 - Mitchell Trent的博客
ASP.NET MVC 3自定义验证 - Microsoft Developer Network