自定义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> 
+0

您正在使用某种验证插件或类似的东西吗? – thwd 2011-03-24 21:36:31

+0

即时通讯使用jquery.validate.min.js – raklos 2011-03-24 21:38:28

这里有几个问题。一个是你试图混合不引人注意的和正规的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规则。

+0

是的即时通讯使用mvc3 - 这没有奏效。 :( – raklos 2011-03-24 21:57:22