javascript - 使用 EditorTemplate 时,使用 javascript 进行 Dropdownlist Change 事件

标签 javascript c# asp.net-mvc

我有一个 EditorTemplate - 效果很好。在它里面,我有一个下拉列表,我用一个类和 2 个 div 来装饰

 <div>
 @Html.DropDownListFor(m => m.Type, (SelectList)ViewData["TypeList"], "-- Select --", new { @class = "TypeSelector" })
 @Html.ValidationMessageFor(m => m.Type)
 </div>     
 <div class="EmailDiv">EmailStuffHere</div>
 <div class="CalendarDiv">CalendarStuffHere</div>

我试图根据下拉列表的选择显示 2 个 div 中的 1 个

下拉列表填充良好,如图所示,下拉列表包含 2 个项目“日历”和“电子邮件”

我有以下 JavaScript:

function checkSelection() {

    $(".EmailDiv").hide();
    $(".CalendarDiv").hide();

    var selectedItem = $(this).val();

    if (selectedItem == "Email") {
        $(".EmailDiv").show();
    } else if (selectedItem == "Calendar") {
        $(".CalendarDiv").show();
    }
};

var myobject = new checkSelection();

$(document).ready(function () {
    checkSelection();
    $(".TypeSelector").change(checkSelection);
    checkSelection.apply($(".TypeSelector"));
});

JavaScript 文件加载(我可以在我的 Firefox 调试器中看到它) 但由于某种原因没有被击中。 两个 div 都不显示。

我做错了什么?

最佳答案

将每个项目的 html 封装在容器中,以便更轻松地选择相关元素

<div class="container"> // add this or similar
  <div>
    @Html.DropDownListFor(m => m.Type, (SelectList)ViewData["TypeList"], "-- Select --", new { @class = "TypeSelector" })
    @Html.ValidationMessageFor(m => m.Type)
  </div>     
  <div class="EmailDiv">EmailStuffHere</div>
  <div class="CalendarDiv">CalendarStuffHere</div>
</div>

和CSS

.EmailDiv, .CalendarDiv {
  display:none;
}

然后是脚本(在主视图中)

$(document).ready(function () {

  // Set initial visibility
  $('.TypeSelector').each(function(index, item) {
    var container = $(this).closest('.container');
    if ($(this).val() == 'Calendar') {
        container.find('.CalendarDiv').show();
    } else if ($(this).val() == 'Email') {
        container.find('.EmailDiv').show();
    }
});

// Update visibiity on selection
$('.TypeSelector').change(function() {
    var container = $(this).closest('.container');
    if ($(this).val() == 'Calendar') {
        container.find('.CalendarDiv').show();
        container.find('.EmailDiv').hide();
    } else if ($(this).val() == 'Email') {
        container.find('.EmailDiv').show();
        container.find('.CalendarDiv').hide();
    } else { // this may or may not be necessary
        container.find('.EmailDiv').hide();
        container.find('.CalendarDiv').hide();
    }
});

}

关于javascript - 使用 EditorTemplate 时,使用 javascript 进行 Dropdownlist Change 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013320/

相关文章:

javascript - 如果任何 div 有 Class through alert

javascript - "."没有被解析为 require() Node.js 的一部分

javascript - bootstrap 轮播自动播放,幻灯片激活时开始播放视频

asp.net-mvc - 具有可为空 Guid 的 Web Api GET 方法可能吗?

c# - 应用程序启动时 bundle 中的异常

asp.net-mvc - Fluent NHibernate 获取已保存对象的 ID

javascript - 我在页面加载时将整个 $_SESSION 变量放入 json 对象中。虽然这对我有用,但这是一个好的做法吗?

c# - 非静态字段、方法或属性需要对象引用 'System.Web.UI.Page.Request.get'

c# - xtraGrid gridControl 中的自定义 summerType

c# - 获取时间过程需要几秒钟才能完成?