Javascript 在禁用的select元素上启用客户端验证
我得到了一个使用asp.net core 3.1 MVC的项目。 它包含一个已禁用选择的窗体Javascript 在禁用的select元素上启用客户端验证,javascript,jquery,asp.net-core,model-view-controller,asp.net-core-3.1,Javascript,Jquery,Asp.net Core,Model View Controller,Asp.net Core 3.1,我得到了一个使用asp.net core 3.1 MVC的项目。 它包含一个已禁用选择的窗体 <div class="col-12 mb-3"> <select asp-for="SelectableItem" class="multi-select form-control" id="selectedItem" disabled="disabled" r
<div class="col-12 mb-3">
<select asp-for="SelectableItem" class="multi-select form-control" id="selectedItem" disabled="disabled" required="required">
<option value="">-- Select Item --</option>
</select>
<span asp-validation-for="SelectableItems" class="text-danger"></span>
</div>
这些似乎都没什么作用,禁用的select拒绝验证,所有其他建议(如readonly)对select元素都不起作用,我也不希望它被全局允许,因为这会弄乱其他一些表单。如果您真的想验证所有禁用的表单字段,插件中的相关行是:
.not( ":submit, :reset, :image, :disabled" )
按照以下步骤操作:
1.在项目中找到jquery.validate.js
2.打开js并按ctrl+F查找包含disabled(已禁用)的行,他们会在此行上发表评论,或者您可以删除此行中的:disabled(已禁用):
3.如果您使用默认的asp.net核心项目,请记住更改_validationscriptial.cshtml。因为此视图添加了jquery.validate.min.js的引用,但是您修改了jquery.validate.js。如果您仍然要使用min.js,请阅读并了解如何捆绑和缩小静态资产:
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> //change here...
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
Viewremove required=必需:
结果:
我确实很快更新了样本,但是没有;不包含名称,是的,我使用标准提交,但启用后验证工作正常吗?所以这个名字似乎不影响这个?很公平!如果加上一个名字,会有什么变化吗?我现在手动添加了一个,只是为了保存,但这也不能使它生效。哈哈,很好,我可以在检查代码后告诉你,是的,添加了一个与绑定模型属性相同的名称。如果通过disabled属性禁用该字段,jQuery验证插件将始终忽略它。但是如果您更改为只读,它可以在我的项目中很好地工作,它验证selectlist字段。点确定您为什么不工作,也许你需要为你的js提供更多的代码,你在你的项目中引用了什么js插件?使我的sampl代码中显示的选择为只读并不会阻止任何人使用它,只会阻止任何人选择不同的选项,如果他们选择了这个列表,他们会发现它是空的,这可能会引起混乱,特别是如果它也发出警告的话。
.not( ":submit, :reset, :image, :disabled" )
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> //change here...
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
public class Test
{
[Required] //add this
public string SelectableItem { get; set; }
}
@model Test
<form method="post">
<input type="checkbox" />
<div class="col-12 mb-3">
<select asp-for="SelectableItem" class="multi-select form-control" id="selectedItem" disabled="disabled">
<option value="">-- Select Item --</option>
</select>
<span asp-validation-for="SelectableItem" class="text-danger"></span>
</div>
<input type="submit" value="Create" />
</form>
@section Scripts
{
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
$(document).ready(function () {
$('input:checkbox').change(function () {
if (this.checked) {
//add to select list
$("#selectedItem").append($("<option></option>")
.attr("value", "1")
.text("aa"));
$("#selectedItem").append($("<option></option>")
.attr("value", "2")
.text("bb"));
$("#selectedItem").append($("<option></option>")
.attr("value", "3")
.text("cc"));
// $("selectedItem").prop('required', true);
$("#selectedItem").removeAttr('disabled');
}
else {
//remove item from select list
$("#selectedItem").empty().append($("<option></option>")
.attr("value", "")
.text("-- Select Item --"));
$("#selectedItem").prop('disabled', true);
}
});
});
</script>
}