2011-03-24 94 views
2

我想寫一個自定義驗證,如果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

回答

11

這裏有幾個問題。一個是你試圖混合不引人注意的和正規的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

0

雖然我沒有測試過這一點,我認爲,所有你缺少的是要連接的元素,你想要使用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