javascript - MVC - 根据下拉列表显示或隐藏 (div) 字段

标签 javascript jquery razor asp.net-mvc-5

我们有一个下拉列表,如果您选择“不满意”,则应显示“保留”字段。我们正在使用 MVC 5,但我们所拥有的在这里不起作用:

下拉:

List<SelectListItem> satisfactionLevel = new List<SelectListItem>();
satisfactionLevel.Add(new SelectListItem
{
    Text = "Satisfactory",
    Value = "Satisfactory"
});
satisfactionLevel.Add(new SelectListItem
{
    Text = "Unsatisfactory",
    Value = "Unsatisfactory",
});

字段:

   @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()

        <div class="form-horizontal">

           <div id="QPerformance" class="form-group row">
                @Html.LabelFor(model => model.QPerformance, htmlAttributes: new { @class = "control-label col-md-2" })
                <div  class="col-md-10">
                    @Html.DropDownListFor(model => model.QPerformance, satisfactionLevel, "----Select----")
                    @Html.ValidationMessageFor(model => model.QPerformance, "", new { @class = "text-danger" })
                </div>
            </div>


            <div id="QRetention" class="form-group" style="visibility: hidden">
                @Html.LabelFor(model => model.QRetention, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.QRetention, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.QRetention, "", new { @class = "text-danger" })
                </div>
            </div>
    }

JavaScript部分,当我们更改下拉列表时,这部分我们无法使字段显示或隐藏:

  @section Scripts {
    <script type="text/javascript"  src="~/Scripts/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">

        $(function hideOnLoad() {
            $('#QRetention').hide();
        });


        $(function () {
            $(document).ready(function () {
                $('#QPerformance').change(function () {
                    if ($(this).val() != 'Unsatisfactory') {
                        $('#QRetention').hide();
                    } else {
                        $('#QRetention').show();
                    }
                });
            });
        });

    </script>
        }

最佳答案

您的问题是:Razor 将您的 @Html.LabelFor(model => model.QPerformance) 元素渲染为其父 div 元素。 那么js将无法正常工作。

您可以更改您的 div id 来解决该问题。

<div id="QPerformanceGroup" class="form-group row">

<div id="QRetentionGroup" class="form-group" >

还有js

<script type="text/javascript">
    $(function () {
        if($('#QPerformance').val() != 'Unsatisfactory')
        {
            $('#QRetentionGroup').hide();
        }

        $('#QPerformance').change(function () {
            if ($(this).val() != 'Unsatisfactory') {
                $('#QRetentionGroup').hide();
            } else {
                $('#QRetentionGroup').show();
            }
        });
    });

</script>

关于javascript - MVC - 根据下拉列表显示或隐藏 (div) 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103875/

相关文章:

razor - 在使用WebMatrix + Razor制作的网站上生成站点地图

javascript - 带有动态内容的传单弹出窗口不在标记上居中

javascript - 如何使用 Jquery 和 ajax Laravel 5.4 切换数据库中的 bool 值

jquery - 动画期间仅突出显示集合中的一个元素

javascript - JSLint 错误 : "Move the invocation into the parens that contain the function"

razor - Ajax.BeginForm 和 OnBegin 防止 Action 被调用

c# - 用于 Html 帮助程序的 Visual Studio 自动完成

javascript - 模式匹配

javascript - Javascript 对象的总和

javascript - javascript 查询选择器错误