2009-09-25 17 views
116

jQuery Validateというエラーメッセージを表示するなどの検証を手動で開始したいと考えています。jQueryで検証を手動で起動するにはどうすればよいですか?

<form> 
<input id=i1> <button id=b1> 
<input id=i2> <button id=b2> 
</form> 

b1をクリックするだけi1を検証する必要があります。

私が達成しようとしているシナリオでは、このような形です。鶏b2をクリックすると、i2のみ検証されます。ただし、すべてのフィールドを転記する必要があります。これどうやってするの? b1/b2のclickイベントを処理し、手動でフォームの一部を検証することを考えました。

+0

?このプラグインは、フォーム全体を検証するのに非常に便利ですが、この場合、手動でフォームをより現実的に検証できます。 – Anatoliy

+0

私の例では、フォームはそれより大きかったです。私はそれを自動化したい。 – usr

答えて

136

このライブラリは、単一要素の検証を可能にするようです。ちょうどあなたのボタンにクリックイベントを関連付けると、次のことを試してみてください。ここ

$("#myform").validate().element("#i1"); 

例:

http://docs.jquery.com/Plugins/Validation/Validator/element#element

+9

これはフォーム全体を検証し、1つのフィールドのみを検証するための正しい方法は次のとおりです。http://stackoverflow.com/a/12195091/114029 –

+0

何らかの理由で、これを検証するときにカスタムエラーテキストが表示されません方法。私がDurandalのダイアログの中を走っているという事実と関係しているかもしれません。上記の文脈でこのフレームワークに多数の問題がある。 –

25

私のアプローチは以下の通りでした。

$('#myForm input:checkbox[name=yourChkBxName]').click(
function(e){ 
    $("#myForm").valid(); 
} 
) 
+0

My Query if($( '#someID)===' 2017-4-12){$( "#myform")} validate()。要素( "#i1")。valid();} else {$ –

89

または1つは、単純に使用することができます:今、私はただ一つの特定のチェックボックスがクリックされたとき、私のフォームが検証されたかった/変更$('#myElem').valid()

if ($('#myElem').valid()){ 
    // will also trigger unobtrusive validation only for this element if in place 
    // add your extra logic here to execute only when element is valid 
} 
+14

このメソッドを使用してチェックする前に、フォームで 'validate()'を呼び出す必要があります。 – GETah

+0

私はこのようなクエリを持っています。($( '#myElem').val()== '2017-4-12'){日付選択が間違っています } else {有効な選択} –

0

が、私はそれが@Anastasiosyal私は共有したいTNX働いてみましたそれはこのスレッド上にあります。

フィールドを空にしたときに入力フィールドがどのようにトリガーしなかったかは肯定的ではありません。しかし、私は使用して個別に必要なフィールドをトリガするために管理:ここでの私の見解は

@using (Html.BeginForm("SaveSettings", "Settings", FormMethod.Post, new {id = "saveForm"})) 
{ 
    <div id="sevenRightBody"> 
     <div id="mapMenuitemPanel" class="setingsPanelStyle" style="display: block;"> 
      <div class="defaultpanelTitleStyle">Map Settings</div> 
      Customize the map view upon initial navigation to the map view page. 
      <p class="setting-p">@Html.LabelFor(x => x.NodeZoomLevel)</p> 
      <p class="setting-p">@Html.EditorFor(x => x.NodeZoomLevel) @Html.ValidationMessageFor(x => x.NodeZoomLevel)</p> 
      <p class="setting-p">@Html.LabelFor(x => x.ZoomLevel)</p> 
      <p class="setting-p">@Html.EditorFor(x => x.ZoomLevel) @Html.ValidationMessageFor(x => x.ZoomLevel)</p> 
      <p class="setting-p">@Html.LabelFor(x => x.CenterLatitude)</p> 
      <p class="setting-p">@Html.EditorFor(x => x.CenterLatitude) @Html.ValidationMessageFor(x => x.CenterLatitude)</p> 
      <p class="setting-p">@Html.LabelFor(x => x.CenterLongitude)</p> 
      <p class="setting-p">@Html.EditorFor(x => x.CenterLongitude) @Html.ValidationMessageFor(x => x.CenterLongitude)</p> 
      <p class="setting-p">@Html.LabelFor(x => x.NodeIconSize)</p> 
      <p class="setting-p">@Html.SliderSelectFor(x => x.NodeIconSize) @Html.ValidationMessageFor(x => x.NodeIconSize)</p> 
     </div> 

だと私のエンティティ

public class UserSetting : IEquatable<UserSetting> 
    { 
     [Required(ErrorMessage = "Missing Node Zoom Level.")] 
     [Range(200, 10000000, ErrorMessage = "Node Zoom Level must be between {1} and {2}.")] 
     [DefaultValue(100000)] 
     [Display(Name = "Node Zoom Level")] 
     public double NodeZoomLevel { get; set; } 

     [Required(ErrorMessage = "Missing Zoom Level.")] 
     [Range(200, 10000000, ErrorMessage = "Zoom Level must be between {1} and {2}.")] 
     [DefaultValue(1000000)] 
     [Display(Name = "Zoom Level")] 
     public double ZoomLevel { get; set; } 

     [Range(-90, 90, ErrorMessage = "Latitude degrees must be between {1} and {2}.")] 
     [Required(ErrorMessage = "Missing Latitude.")] 
     [DefaultValue(-200)] 
     [Display(Name = "Latitude")] 
     public double CenterLatitude { get; set; } 

     [Range(-180, 180, ErrorMessage = "Longitude degrees must be between {1} and {2}.")] 
     [Required(ErrorMessage = "Missing Longitude.")] 
     [DefaultValue(-200)] 
     [Display(Name = "Longitude")] 
     public double CenterLongitude { get; set; } 

     [Display(Name = "Save Dashboard")] 
     public bool SaveDashboard { get; set; } 
..... 
} 
+3

この回答は、質問は明示的にjQueryの検証に関係しています。 –

1

$(".setting-p input").bind("change", function() { 
     //Seven.NetOps.validateSettings(Seven.NetOps.saveSettings); 
     /*$.validator.unobtrusive.parse($('#saveForm'));*/ 
     $('#NodeZoomLevel').valid(); 
     $('#ZoomLevel').valid(); 
     $('#CenterLatitude').valid(); 
     $('#CenterLongitude').valid(); 
     $('#NodeIconSize').valid(); 
     $('#SaveDashboard').valid(); 
     $('#AutoRefresh').valid(); 
    }); 

バージョン1.14

のよう文書化されていない方法があります
validator.checkForm() 

このメソッドは、trueまたはfalseを返すかどうかを黙って検証します。エラーメッセージは表示されません。フォーム上のパラメータでvalidate()を使用して、手動でその後、フォームのいずれかのフィールドを検証したい場合は

+8

文書化されていない場合は、いつでも破損する可能性があります。 – usr

0

は良い方法があります:

var validationManager = $('.myForm').validate(myParameters); 
... 
validationManager.element($(this)); 

ドキュメンテーション:私の似たようなケースでValidator.element()

0

、I私自身の検証ロジックを持ち、jQueryの検証を使ってメッセージを表示したかっただけです。これは私がやったことでした。それを手動で検証しないのはなぜ

//1) Enable jQuery validation 
 
var validator = $('#myForm').validate(); 
 

 
$('#myButton').click(function(){ 
 
    //my own validation logic here 
 
    //..... 
 
    //2) when validation failed, show the error message manually 
 
    validator.showErrors({ 
 
    'myField': 'my custom error message' 
 
    }); 
 
});

関連する問題