2016-12-08 7 views
0

私はこのような負荷や負荷の質問があることを知っていますが、本当に助けられた人はいません。なぜ?invalid()は常にTRUEを返しますか?

1つのページに2つのフォームがあります(一部のフィールドは共有されています)。一度に1つのフォームしか送信されません。私はいくつかのフィールドが共有されているからだと思っていましたが、私は2番目のフォームをページから完全に削除しましたが、エラーはまだ存在していました。

私はカスタムバリデーターを実装していますが、私が.valid()を呼び出すと、常にTRUEを返します。

現在、私は第1フォームのバリデーターしか持っていません(私は失敗したために移動しませんでした)。

@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form", @id = "driver-form" })) 
{ 
    @Html.HiddenFor(m => m.IsGarage, new { @class = "_HdnIsGarage" }) 

    <div class="registration-form" id="driver-registration-form"> 
     @Html.AntiForgeryToken() 
     <hr /> 
     @Html.ValidationSummary("", new { @class = "text-danger" }) 
     <div> 
      @Html.Kendo().TextBoxFor(m => m.FirstName).HtmlAttributes(new { placeholder = "First Name" }) 
     </div> 
     <div> 
      @Html.Kendo().TextBoxFor(m => m.LastName).HtmlAttributes(new { placeholder = "Last Name" }) 
     </div> 
     <div> 
      @Html.Kendo().TextBoxFor(m => m.Email).HtmlAttributes(new { placeholder = "E-mail", @type = "e-mail" }) 
     </div> 
     <div> 
      @Html.Kendo().TextBoxFor(m => m.PhoneNum).HtmlAttributes(new { placeholder = "Phone Number" }) 
     </div> 
     <div> 
      @Html.Kendo().TextBoxFor(m => m.Password).HtmlAttributes(new { placeholder = "Password", @type = "password" }) 
     </div> 
     <div> 
      @*@Html.Kendo().TextBoxFor(m => m.ConfirmPassword).Name("pw").HtmlAttributes(new { placeholder = "Password" }))*@ 
     </div> 
     <div> 
      @Html.Kendo().Button().Name("Register").Content("Register").HtmlAttributes(new { type = "button", onclick = "Javascript:driverRegister()" }) 
     </div> 
    </div> 
} 

そしてここでjQueryの '登録' をクリックしたときに呼び出されます:ここで

$('#driver-form').validate({ 
rules:{ 
    FirstName: { 
     required:true, 
     minlength: 2, 
    }, 
    LastName: { 
     required:true, 
     minlength: 2, 
    }, 
    Email: { 
     required: true, 
     email: true 
    }, 
    PhoneNum: { 
     required: true, 
     exactlength: 11, 
    },   
    Password: { 
     required: true, 
     minlength: 6, 
     symbol: true 
    } 
},messages:{ 
    Firstname: { 
     required: "Please enter your firstname", 
     minlength: "Firstname should contain more that 2 characters" 
    }, 
    LastName: { 
     required: "Please enter your lastname", 
     minlength: "Lastname should contain more that 2 characters" 
    }, 
}}); 

フォームで

 function driverRegister() { 
     debugger; 
     var test1 = $('#driver-form') 
     var test = $('#driver-registration-form input'); 
     alert(test.valid()) 
     if (test.valid() == true) { 
      $('#driver-form').submit(); 
     } 
    } 
+0

validate.unobtrusiveも使用していますか?その場合は、 '.validator.unobtrusive.parse($( '#driver-form'))'を実行してから '.valid()'を呼び出してください。 – Stuart

+1

JQueryの検証プラグインを使用していると仮定すると、 '.valid()'関数はフォームを入力フィールドではなく検証します。 - [ここにチェック](https://jqueryvalidation.org/valid/) –

+0

@Stuart、ユーザーとjsが.parseに関する不満を持っています NikhilNanjappa、私は別のフォームで入力を検証していて、それは完全に動作します –

答えて

0

まあ、$(文書)でラッピング検証機能.ready (関数 () {}); は問題を解決するようです。ありがとうございました。ありがとうございました:)

関連する問題