【问题标题】:MVC5 Radio Button Instant Hide/ShowMVC5 单选按钮即时隐藏/显示
【发布时间】:2015-05-12 13:31:21
【问题描述】:

我曾经通过输入单选按钮的 id 和名称在 Web 窗体开发中使用它,但在 MVC5 中似乎无法获得它,有人能指出我做错了什么吗?

在单选按钮(模型的一部分)选择上,根据哪个按钮,我希望出现另一个文本框(在 div 内)。

查看:

<div class="ui-grid-solo">
                  <div class="ui-grid-solo">
                    <div class="ui-block-a">
                        <p>AS Number Type</p>
                        <span>
                            @Html.RadioButtonFor(model => model.NumberType, "Odd", true)Odd
                            @Html.RadioButtonFor(model => model.NumberType, "Even", false)Even
                        </span>
                    </div>
                </div>
                @if (Model.NumberType == true)
                {
                    <div id="OddOrEven">
                        <div class="ui-grid-solo">
                            <div class="ui-block-a">
                                <span>
                                    @Html.EditorFor(m => m.Reason)
                                </span>
                            </div>
                        </div>
                    </div>
                }  

JavaScript:

@section Scripts
{
    <script type="text/javascript" src="~/Scripts/maintainscroll.jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("input[Value='Odd']").click(function () {
                var test = $(this).val();
                $("#OddOrEven").show();
            });
        });
    </script>

}

【问题讨论】:

  • "input[Value='Odd']"这没有选择元素?
  • 这对我不起作用:(
  • 抱歉,我不明白什么是行不通的。你不会发布从 razor 生成的结果 html 吗?
  • @purplesmurf 说的有效,猜测是模型阻塞了 js 什么的。

标签: javascript jquery asp.net-mvc


【解决方案1】:

我会这样做:

@Html.RadioButtonFor(model => model.NumberType, "Odd", true)Odd
@Html.RadioButtonFor(model => model.NumberType, "Even", false)Even

<div id="OddOrEven">
  <div class="ui-grid-solo">
    <div class="ui-block-a">
      <span>
        @Html.EditorFor(m => m.Reason)
      </span>
    </div>
  </div>
</div>

<script>
  $("#OddOrEven").hide();
  $("input[name='NumberType']").on("change", function () {
    if ($(this).val() == "Odd") {
      $("#OddOrEven").show();
    }
  }):
</script>

基本上,通过输入名称而不是值来获取单选按钮组的更改事件。使用该值的问题是,如果您在同一个视图上有多个单选按钮组,并且它们每个都有相同的值对(即:真/假),那么您的视图将不知道要选择哪个单选按钮组。使用名称是正确的方法。

【讨论】:

  • 很好,摆脱我的内联 css
【解决方案2】:

删除 div 周围的@if,将 div css 类设置为在页面加载时隐藏,然后您的按钮将起作用,但是单击它仍会将其保留在那里,添加到 javascript 以再次隐藏文本框。

所以删除 @if 将您的 div 更改为 &lt;div id="OddOrEven" style="display:none"&gt; 以及您的 script 中的以下内容:

$(document).ready(function () {
            $("input[Value='Odd']").click(function () {
                $("#OddOrEven").show();
            });
            $("input[Value='Even']").click(function () {
                $("#OddOrEven").hide();
            });
        });

【讨论】:

  • 你是第一个,而且是对的,但 Eckert 的更好更干净
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2019-03-19
相关资源
最近更新 更多