自定义jqueryvalidation和不引人注目的JavaScript

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

我有以下 – 它不工作,我不知道为什么。

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

文本区域有一个“注释”类,该表单称为“noteform”

 $(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" } }); });  

这里有几个问题。 一个是你试图混合不显眼和常规的jqueryvalidation。 如果你想使用这样的validation,那么你需要确保不包括jquery.validate.unobtrusive.js 。 这是因为jquery.validate.unobtrusive.js自动解析并生成文档的validation器, validate第一件事是检查是否存在现有validation器,如果有,则退出。

如果你决定采用非引人注目的路线,请确保不要使用$.validator.unobtrusive.adapters.add因为它会导致错误而没有jquery.validate.unobtrusive.js

因为我认为你正在使用MVC3,所以我建议使用不引人注目的validation。 如果你要进行不显眼的validation,你有两个选择,自己设置data- *属性,方法是按照JohnnyO的建议将data-val="true" data-val-nohtml="Html not allowed"到textarea中。包括带有data-valmsg-for="note" data-valmsg-replace="true"的span,以显示错误消息。 或者,您可以创建自己的DataAnnotation属性。

这是addMethod的代码(两种validation都需要)

   

并且不引人注目的javascript如下

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

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

在MVC 3中对传统与不引人注目的JavaScriptvalidation进行简要比较–Mitchell Trent的博客
ASP.NET MVC 3自定义validation – Microsoft Developer Network

虽然我没有对此进行过测试,但我认为您所缺少的是使用nohtml规则连接要validation的元素。 像这样的东西:

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

基于您的一些描述,我假设您使用的是ASP.NET MVC3。 在这种情况下,如果您在html元素上生成validation属性服务器端,则只需要使用不显眼的适配器(例如 )。 在这种情况下,您需要使用不显眼的适配器连接元素以使用您的nohtml规则。