Как вручную запустить проверку с помощью jQuery validate?
Я хочу вручную запустить проверку, включая отображение сообщений об ошибках с jQuery Validate.
сценарий, который я пытаюсь выполнить, имеет такую форму:
<form>
<input id=i1> <button id=b1>
<input id=i2> <button id=b2>
</form>
при нажатии кнопки b1
, только i1
должны быть проверены. курица щелкает b2
, только i2
должны быть проверены. Однако все поля должны быть разнесены. Как я могу это сделать? Я думал об обработке события click для b1/b2
и ручная проверка части форма.
8 ответов:
эта библиотека, кажется, позволяет проверку для отдельных элементов. Просто свяжите событие click с вашей кнопкой и попробуйте следующее:
$("#myform").validate().element("#i1");
вот примеры:
http://docs.jquery.com/Plugins/Validation/Validator/element#element
или можно просто использовать:
$('#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 }
мой подход, как показано ниже. Теперь я просто хотел, чтобы моя форма была проверена, когда один конкретный флажок был нажат / изменен:
$('#myForm input:checkbox[name=yourChkBxName]').click( function(e){ $("#myForm").valid(); } )
существует недокументированный метод с версии 1.14
validator.checkForm()
этот метод молча проверяет для возврата true / false. Это не вызывает сообщения об ошибках.
Как написано в документация, способ запуска проверки формы программно заключается в вызове валидатора.форма()
var validator = $( "#myform" ).validate(); validator.form();
я попробовал это сработало 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; } ..... }
есть хороший способ, если вы используете
validate()
с параметрами на форме и хотите проверить одно поле вашей формы вручную после этого:var validationManager = $('.myForm').validate(myParameters); ... validationManager.element($(this));
документы: валидатор.элемент()
в моем подобном случае у меня была своя логика проверки и я просто хотел использовать проверку 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' }); });