Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在禁用的select元素上启用客户端验证_Javascript_Jquery_Asp.net Core_Model View Controller_Asp.net Core 3.1 - Fatal编程技术网

Javascript 在禁用的select元素上启用客户端验证

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

我得到了一个使用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" 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>
}