jQuery validate only 在更改 select 选项时验证一次
jQuery validate only validates once when changing select option
我有一对依赖字段 - 州和邮政编码,以及一个 api 控制器来验证邮政编码是否出现在州中。我可以对 State
下拉菜单进行更改以再次验证邮政编码就好了 - 但是,之后如果我将 select 改回来,则不会进行验证!
页面中重要的部分:
@Html.LabelFor(model => model.State, new { @class = "control-label col-md-1" })
<div class="col-md-2">
@Html.DropDownListFor(model => model.State, Model.StateSelections, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.State, "", new { @class = "text-danger" })
</div>
@Html.LabelFor(model => model.Zip, new { @class = "col-md-1 control-label" })
<div class="col-md-2">
@Html.EditorFor(model => model.Zip, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Zip, "", new { @class = "text-danger" })
</div>
jquery:
$(document).ready(function () {
$("#@Html.IdFor(model => model.State)").on("change", function () {
$("#@Html.IdFor(model => model.Zip)").valid();
});
$("#@Html.IdFor(model => model.Zip)").rules("add", {
"remote": {
url: zipcodeApiUrl,
type: "GET",
data: {
stateAbbreviation: function () {
//alert('I validate, but only the first time');
return $("#@Html.IdFor(model => model.State)").val();
}
}
}
});
});
这是呈现的代码:
var stateId = '#State';
var zipcodeId = '#Zip';
$(document).ready(function () {
$(stateId).on("change", function () {
$(zipcodeId).valid();
});
$(zipcodeId).rules("add", {
"remote": {
url: zipcodeApiUrl,
type: "GET",
data: {
stateAbbreviation: function () {
return $(stateId).val();
}
}
}
});
});
(剪断)
<label class="control-label col-md-1" for="State">State</label>
<div class="col-md-2">
<select data-val="true" data-val-required="The State field is required." htmlAttributes="{ class = form-control }" id="State" name="State">
<option value="AK">AK - ALASKA</option>
<option value="AL">AL - ALABAMA</option>
<option value="AP">AP - ARMED FORCES PACIFIC</option>
(...)
<option value="WI">WI - WISCONSIN</option>
<option value="WV">WV - WEST VIRGINIA</option>
<option value="WY">WY - WYOMING</option>
</select>
<span class="field-validation-valid text-danger" data-valmsg-for="State" data-valmsg-replace="true"></span>
</div>
<label class="col-md-1 control-label" for="Zip">Zip</label>
<div class="col-md-2">
<input class="form-control text-box single-line" data-val="true" data-val-length="The field Zip must be a string with a maximum length of 5." data-val-length-max="5" data-val-regex="Zip code must be a 5 digit number" data-val-regex-pattern="\d{1,5}" data-val-required="The Zip field is required." id="Zip" name="Zip" type="text" value="11735" />
<span class="field-validation-valid text-danger" data-valmsg-for="Zip" data-valmsg-replace="true"></span>
</div>
编辑:奇怪的是,如果我删除邮政编码字段中的一个字符,验证将再次开始工作,直到我与下拉列表进行交互。也许有一个数据属性需要更改才能再次对其调用有效?
试图找出为什么 valid() 只能工作一次。
我深入挖掘并找到了导致问题的确切 LoC 并将其发布到 repo。看来真的是打算这么表演的!
http://github.com/jzaefferer/jquery-validation/issues/1567
我将拉取请求合并到 jquery-validate 中,修复了这个错误!
我有一对依赖字段 - 州和邮政编码,以及一个 api 控制器来验证邮政编码是否出现在州中。我可以对 State
下拉菜单进行更改以再次验证邮政编码就好了 - 但是,之后如果我将 select 改回来,则不会进行验证!
页面中重要的部分:
@Html.LabelFor(model => model.State, new { @class = "control-label col-md-1" })
<div class="col-md-2">
@Html.DropDownListFor(model => model.State, Model.StateSelections, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.State, "", new { @class = "text-danger" })
</div>
@Html.LabelFor(model => model.Zip, new { @class = "col-md-1 control-label" })
<div class="col-md-2">
@Html.EditorFor(model => model.Zip, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Zip, "", new { @class = "text-danger" })
</div>
jquery:
$(document).ready(function () {
$("#@Html.IdFor(model => model.State)").on("change", function () {
$("#@Html.IdFor(model => model.Zip)").valid();
});
$("#@Html.IdFor(model => model.Zip)").rules("add", {
"remote": {
url: zipcodeApiUrl,
type: "GET",
data: {
stateAbbreviation: function () {
//alert('I validate, but only the first time');
return $("#@Html.IdFor(model => model.State)").val();
}
}
}
});
});
这是呈现的代码:
var stateId = '#State';
var zipcodeId = '#Zip';
$(document).ready(function () {
$(stateId).on("change", function () {
$(zipcodeId).valid();
});
$(zipcodeId).rules("add", {
"remote": {
url: zipcodeApiUrl,
type: "GET",
data: {
stateAbbreviation: function () {
return $(stateId).val();
}
}
}
});
});
(剪断)
<label class="control-label col-md-1" for="State">State</label>
<div class="col-md-2">
<select data-val="true" data-val-required="The State field is required." htmlAttributes="{ class = form-control }" id="State" name="State">
<option value="AK">AK - ALASKA</option>
<option value="AL">AL - ALABAMA</option>
<option value="AP">AP - ARMED FORCES PACIFIC</option>
(...)
<option value="WI">WI - WISCONSIN</option>
<option value="WV">WV - WEST VIRGINIA</option>
<option value="WY">WY - WYOMING</option>
</select>
<span class="field-validation-valid text-danger" data-valmsg-for="State" data-valmsg-replace="true"></span>
</div>
<label class="col-md-1 control-label" for="Zip">Zip</label>
<div class="col-md-2">
<input class="form-control text-box single-line" data-val="true" data-val-length="The field Zip must be a string with a maximum length of 5." data-val-length-max="5" data-val-regex="Zip code must be a 5 digit number" data-val-regex-pattern="\d{1,5}" data-val-required="The Zip field is required." id="Zip" name="Zip" type="text" value="11735" />
<span class="field-validation-valid text-danger" data-valmsg-for="Zip" data-valmsg-replace="true"></span>
</div>
编辑:奇怪的是,如果我删除邮政编码字段中的一个字符,验证将再次开始工作,直到我与下拉列表进行交互。也许有一个数据属性需要更改才能再次对其调用有效?
试图找出为什么 valid() 只能工作一次。
我深入挖掘并找到了导致问题的确切 LoC 并将其发布到 repo。看来真的是打算这么表演的!
http://github.com/jzaefferer/jquery-validation/issues/1567
我将拉取请求合并到 jquery-validate 中,修复了这个错误!