自定义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规则。