155

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

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

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

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

4

9 に答える 9

186

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

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

ここに例を示します:

https://jqueryvalidation.org/Validator.element

于 2009-10-08T15:24:56.017 に答える
124

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

于 2012-08-30T10:44:19.187 に答える
30

私のアプローチは以下の通りでした。特定のチェックボックスがクリック/変更されたときにフォームを検証したかっただけです。

$('#myForm input:checkbox[name=yourChkBxName]').click(
 function(e){
  $("#myForm").valid();
}
)
于 2012-07-11T04:44:01.210 に答える
3

上記の Eva M は、上に投稿されたとおりの答えをほとんど持っていました (Eva M に感謝します!):

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

これはほぼ答えですが、2018 年 12 月 13 日現在の最新の jquery 検証プラグインでさえ問題を引き起こします。 、検証のフォーカス/キー処理が壊れる可能性があり、検証でエラーが正しく表示されない場合があります。

Eva M の回答を使用して、これらのフォーカス/キー/エラー非表示の問題が発生しないようにする方法は次のとおりです。

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

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

2) $("#myform").validate() を二度と呼び出さないでください。

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

3) 変数/グローバルおよび呼び出し形式を使用します。

var bIsValid = oValidator.form();
于 2018-12-14T17:15:58.150 に答える
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; }
.....
}
于 2012-10-30T07:26:31.803 に答える