jQuery検証で手動で検証をトリガーする方法?


143

jQuery Validateでエラーメッセージを表示するなど、検証を手動でトリガーしたい。

私が達成しようとしているシナリオは、次のような形式です。

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

をクリックするとb1i1検証のみが行われます。をクリックするとb2i2検証のみが行われます。ただし、すべてのフィールドを投稿する必要があります。これどうやってするの?b1/b2フォームの一部のクリックイベントを処理し、手動で検証することを検討しました。


手動で検証しないのはなぜですか?このプラグインは、フォーム全体を検証するのに非常に便利ですが、この場合、フォームを手動で検証することができます。
Anatoliy

フォームは、私の例よりも大きくなっています。自動化して欲しい。
USR

回答:


176

そのライブラリは、単一の要素の検証を許可するようです。クリックイベントをボタンに関連付けて、以下を試してください。

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

ここに例:

https://jqueryvalidation.org/Validator.element


15
:これは1つのフィールドを検証するために...フォーム全体を検証し、正しい方法はこれですstackoverflow.com/a/12195091/114029
Leniel Maccaferri

何らかの理由で、この方法で検証すると、カスタムエラーテキストが表示されません。私がDurandalダイアログ内で実行しているという事実と関係があるかもしれません。このコンテキストでは、このフレームワークに多くの問題がある。
P.Brian.Mackey 2017

@Roberto Aloi:リンクは非推奨
セバスチャン

@セバスチャンpingをありがとう、リンクを今更新しました!
Roberto Aloi

113

または、単に次のように使用できます。 $('#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
}

validate()このメソッドを使用してフォームをチェックする前に、フォームで呼び出す必要があることに注意してください。

ドキュメントリンク:https : //jqueryvalidation.org/valid/


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

if($( '#myElem')。val()== '2017-4-12'){日付の選択が間違っています} else {有効な選択}
srinivas gowda

29

私のアプローチは以下の通りでした。ここで、1つの特定のチェックボックスがクリック/変更されたときにフォームが検証されるようにしたいだけです。

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

私のクエリif($( '#someID)===' 2017-4-12){$( "#myform")。validate()。element( "#i1")。valid();} else {$( "#myform")。validate()。element( "#i1")。invalid();}は正しいコードです
srinivas gowda

14

ドキュメントに記載されいるように、フォーム検証をプログラムでトリガーする方法は、validator.form()を呼び出すことです。

var validator = $( "#myform" ).validate();
validator.form();

2
質問は特定の1つのフィールドのみを検証することに関するものなので、これは質問に答えません。しかし、それはまさに私が探していたものです。ありがとう!
jlh

4

バージョン1.14の時点で文書化されていないメソッドがあります

validator.checkForm()

このメソッドは、true / falseを返すかどうかをサイレントに検証します。エラーメッセージは表示されません。


9
文書化されていない=いつでも壊れる可能性があります。
usr

2

上からのEva Mは、ほとんど上に投稿されたとおりの回答がありました(ありがとうEva M!):

var validator = $( "#myform" ).validate();
validator.form();

これはほぼ答えですが、2018年12月13日現在の最新のjquery検証プラグインでも問題が発生します。問題は、そのサンプルを直接コピーして、「。validate()」を2回以上呼び出すと、 、検証のフォーカス/キー処理が壊れ、検証でエラーが正しく表示されない場合があります。

Eva Mの回答を使用して、フォーカス/キー/エラーを隠す問題が発生しないようにする方法を次に示します。

1)バリデーターを変数/グローバルに保存します。

var oValidator = $("#myform").validate();

2)再び$( "#myform")。validate()を呼び出さないでください。

$( "#myform")。validate()を複数回呼び出すと、フォーカス/キー/エラー非表示の問題が発生する可能性があります。

3)変数/グローバルと呼び出しフォームを使用します。

var bIsValid = oValidator.form();

1

私の同様のケースでは、独自の検証ロジックがあり、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'
  });
});


0

tnx @Anastasiosyalで試してみましたが、このスレッドで共有したいと思います。

入力フィールドを空にしたときに入力フィールドがトリガーされなかった方法がわかりません。しかし、私は次の方法で必要な各フィールドを個別にトリガーすることができました。

$(".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();
    });

これが私の見解です

@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検証に明示的に関係している場合、この回答は.Net環境を想定しています。
Kenogu Labz、2014

0

validate()フォームのパラメーターを使用し、後でフォームの1つのフィールドを手動で検証する場合は、良い方法があります。

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

ドキュメント:Validator.element()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.