我想使用 jQuery Validate 手动触发验证并显示错误信息。
我想实现的场景是这样一个表单:
<form>
<input id=i1> <button id=b1>
<input id=i2> <button id=b2>
</form>
当点击b1时,只需要验证i1。当点击b2时,只需要验证i2。但是所有字段都必须提交。我该怎么做?我考虑处理b1/b2的点击事件,并手动验证表单的一部分。
我想使用 jQuery Validate 手动触发验证并显示错误信息。
我想实现的场景是这样一个表单:
<form>
<input id=i1> <button id=b1>
<input id=i2> <button id=b2>
</form>
当点击b1时,只需要验证i1。当点击b2时,只需要验证i2。但是所有字段都必须提交。我该怎么做?我考虑处理b1/b2的点击事件,并手动验证表单的一部分。
这个库似乎只允许针对单个元素进行验证。只需将点击事件与您的按钮关联,并尝试以下操作:
$("#myform").validate().element("#i1");
这里有示例:
或者简单地使用:$('#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/validate()
。 - GETah我的做法如下。现在,我只想在点击/更改一个特定的复选框时验证我的表格:
$('#myForm input:checkbox[name=yourChkBxName]').click(
function(e){
$("#myForm").valid();
}
)
如文档所述,以编程方式触发表单验证的方法是调用 validator.form()。
var validator = $( "#myform" ).validate();
validator.form();
validator.checkForm()
这种方法会在后台默默地验证并返回true/false,它不会触发错误信息。
上面的Eva M已经接近答案了(谢谢你,Eva M!):
var validator = $( "#myform" ).validate();
validator.form();
var oValidator = $("#myform").validate();
2) 永远不要再次调用$("#myform").validate()。
如果您多次调用$("#myform").validate(),可能会导致焦点/键/错误隐藏问题。
3) 使用变量/全局并调用表单。
var bIsValid = oValidator.form();
//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'
});
});
我试过了,行了,谢谢@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));