自定义jquery验证和不显眼的JavaScript
我想写一个自定义验证,如果html提交表单时存在textarea,会给出错误。我有以下 - 其不工作,我不知道为什么。自定义jquery验证和不显眼的JavaScript
也我不明白的不显眼的部分 有人可以告诉我该怎么做,因为我看到有它的其他例子。
文本区有一类“记” 形式被称为“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>
这里有几个问题。一个是你试图混合不引人注意的和正规的jQuery验证。如果你想使用像这样验证,那么你需要确保不包括jquery.validate.unobtrusive.js
。这是因为jquery.validate.unobtrusive.js
会自动分析并为文档生成验证程序,validate
所做的第一件事是检查是否存在验证程序并在存在验证程序时退出。
如果你决定去非低调路线,一定不要使用$.validator.unobtrusive.adapters.add
,因为它会导致错误没有jquery.validate.unobtrusive.js
。
虽然我认为您使用的是MVC3,但我仍建议您使用不显眼的验证方式。 如果您打算采用不显眼的验证方式,您有两种选择,您可以按照JohnnyO的建议将data-val="true" data-val-nohtml="Html not allowed"
添加到textarea中,并使用包含data-valmsg-for="note" data-valmsg-replace="true"
的跨度来显示错误消息,从而设置data- *属性。或者你可以创建自己的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个月之后,我将只留下这些链接供参考。
A brief comparision of Traditional vs Unobtrusive JavaScript Validation in MVC 3 - Mitchell Trent's Blog
ASP.NET MVC 3 Custom Validation - Microsoft Developer Network
虽然我没有测试过这一点,我认为,所有你缺少的是要连接的元素,你想要使用nohtml规则进行验证。这样的事情:
$('textarea.note').rules('add', {
nothml: true
});
根据您的一些描述,我假设您使用的是ASP.NET MVC3。在这种情况下,如果要在html元素上生成验证属性服务器端(例如<textarea data-val="true" data-val-nohtml="Html not allowed"></textarea>
),则只需使用不引人注目的适配器。在这种情况下,您需要使用不引人注目的适配器来连接元素以使用您的nohtml规则。
是的即时通讯使用mvc3 - 这没有奏效。 :( – raklos 2011-03-24 21:57:22
您正在使用某种验证插件或类似的东西吗? – thwd 2011-03-24 21:36:31
即时通讯使用jquery.validate.min.js – raklos 2011-03-24 21:38:28