asp net mvc自定义客户端验证一个字段

时间:2013-05-29 08:50:19

标签: jquery asp.net-mvc asp.net-mvc-3 validation unobtrusive-validation

我想只对一个表单字段覆盖默认客户端验证。

我做的是:

  $( ".txt-field" ).change( function( event )
  {
     if ( !checkField( $(this).val() ) )
     {
        $(this).removeClass("valid").addClass("input-validation-error");
     }
     else
     {
        $(this).addClass("valid").removeClass("input-validation-error");
     }
  } );

我的HTML是

           <div class="fields">
               @Html.LabelFor( m => m.BlahBlah.Field, "Field" )
               @Html.TextBoxFor( m => m.BlahBlah.Field, new { @class = "textbox txt-field" } )
           </div>

但它不起作用。 checkField函数返回true / false。 当我在javascript调试器,并且checkField返回false时,我看到输入验证错误类要添加到我的输入字段,但之后,它被删除,并添加“有效”类! 我究竟做错了什么????我删除了任何模型验证属性,如“required”,“maxLength”等。

2 个答案:

答案 0 :(得分:1)

尝试在“模糊”方法上添加逻辑而不是“更改”方法。

 $( ".txt-field" ).blur( function( event )
{
 if ( !checkField( $(this).val() ) )
 {
    $(this).removeClass("valid").addClass("input-validation-error");
 }
 else
 {
    $(this).removeClass("input-validation-error").addClass("valid");
 }

});

答案 1 :(得分:0)

我在你的逻辑中发现了错误。在else块中首先应该删除类然后添加新类。 验证以下代码:

  $( ".txt-field" ).change( function( event )
  {
     if ( !checkField( $(this).val() ) )
     {
        $(this).removeClass("valid").addClass("input-validation-error");
     }
     else
     {
        $(this).removeClass("input-validation-error").addClass("valid");
     }
  } );