Как вручную запустить валидацию с помощью jQuery validate?

143

Я хочу вручную запустить проверку, включая отображение сообщений об ошибках с помощью jQuery Validate .

Сценарий, который я пытаюсь реализовать, представляет собой такую ​​форму:

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

При нажатии b1только i1должна быть подтверждена. Если щелкнуть мышью b2, только i2подтверждение должно быть подтверждено. Однако все поля должны быть опубликованы. Как я могу это сделать? Я думал об обработке события click для b1/b2и ручной проверки части формы.

USR
источник
Почему бы не проверить это вручную? Этот плагин очень полезен для проверки всей формы, но в этом случае более удобна проверка формы вручную.
Анатолий
Форма больше, чем в моем примере. Я хочу, чтобы это было автоматизировано.
USR

Ответы:

176

Кажется, что эта библиотека позволяет проверять отдельные элементы. Просто свяжите событие нажатия с вашей кнопкой и попробуйте следующее:

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

Примеры здесь:

https://jqueryvalidation.org/Validator.element

Роберто Алои
источник
15
Это проверяет всю форму ... для проверки только 1 поля, правильный путь заключается в следующем: stackoverflow.com/a/12195091/114029
Leniel Maccaferri
По какой-то причине я не получаю пользовательский текст ошибки при проверке таким способом. Может быть, это как-то связано с тем, что я участвую в диалоге Дюрандаля. Наличие множества проблем с этой структурой в указанном контексте.
P.Brian.Mackey
@ Роберто Алои: ссылка устарела
Себастьян
@Sebastian Спасибо за пинг, обновил ссылку сейчас!
Роберто Алои
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/

Anastasiosyal
источник
15
validate()перед проверкой с помощью этого метода необходимо вызвать его в форме.
GETah
у меня такой запрос, если ($ ('# myElem'). val () == '2017-4-12') {неправильный выбор даты} else {правильный выбор}
srinivas gowda
29

Мой подход был как ниже. Теперь я просто хотел, чтобы моя форма была проверена, когда был установлен / изменен один конкретный флажок:

$('#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
Это не отвечает на вопрос, поскольку вопрос касается проверки только одного конкретного поля. Но это именно то, что я искал. Спасибо!
JLH
4

Начиная с версии 1.14 существует недокументированный метод

validator.checkForm()

Этот метод молча проверяет правильность возврата true / false. Это не вызывает сообщения об ошибках.

user5936891
источник
9
недокументированный = может сломаться в любое время.
USR
2

Ева М сверху, почти был ответ, как отправлено выше (Спасибо, Ева М!):

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

Это почти ответ, но он вызывает проблемы, даже в самом последнем плагине для проверки jquery по состоянию на 13 декабря 2018 года. Проблема в том, что если кто-то напрямую копирует этот образец, и НИКОГДА не раз вызывает ".validate ()" обработка фокуса / ключа проверки может быть нарушена, и проверка может не показывать ошибки должным образом.

Вот как использовать ответ Евы М и убедиться, что эти проблемы с фокусом / ключом / сокрытием ошибок не возникают:

1) Сохраните ваш валидатор в переменную / глобальную.

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

2) НЕ вызывайте $ ("# myform"). Validate () НИКОГДА снова.

Если вы вызываете $ ("# myform"). Validate () более одного раза, это может вызвать проблемы с фокусом / ключом / сокрытием ошибок.

3) Используйте переменную / глобальную и форму вызова.

var bIsValid = oValidator.form();
JSB
источник
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'
  });
});

user538220
источник
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; }
.....
}
bherto39
источник
3
Этот ответ предполагает наличие среды .Net, когда вопрос явно касается проверки jQuery.
Кеногу Лабз
0

Есть хороший способ, если вы используете validate()параметры в форме и хотите вручную проверить одно поле вашей формы:

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

Документация: Validator.element ()

Тоби Г.
источник