首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用BeginCollectionItem显示/隐藏逻辑

用BeginCollectionItem显示/隐藏逻辑
EN

Stack Overflow用户
提问于 2017-06-28 13:39:35
回答 3查看 534关注 0票数 1

我正在使用BeginCollectionItem,并试图弄清楚如何获取每个单独的集合值来执行条件显示/隐藏逻辑。例如,如果我有以下剃刀标记:

代码语言:javascript
复制
<div class="collection">
    @using (Html.BeginCollectionItem(nameof(Item)))
    {
        <select class="select-class" id="select-id" asp-for="SelectExample">
            <option value="a">a</option>
            <option value="b">b</option>
        </select>

        <div class="show-if-b">b is selected</div>
    }
</div>

如果选择了"b“元素,我需要显示”hide b“div,否则它需要隐藏。当页面加载("b“可以保存)时,这个逻辑需要在select 的更改上运行,所以我并不总是要附加一个事件。

我对jQuery .closest()、.find()和.parents()尝试过不同的方法,但似乎无法在每个集合中获得特定的选择值。

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-28 14:52:52

您可以在$(this).next()中使用on("change")来选择包含"b is selected"的每个div元素。我将这些元素样式“无”设置为默认值,但您可以根据模型初始值更改此css属性。您可以实现如下所示。

代码语言:javascript
复制
$(".collection .select-class").on("change", function(){
     var val = $(this).val();
     if(val == "a")
     {
         $(this).next().hide();
     }
     else
     {
         $(this).next().show();
     }
     
     
})
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="collection">
    <table>
       <tr>
          <select style="float:left" class="select-class" id="select-id" asp-for="SelectExample">
            <option value="a">a</option>
            <option value="b">b</option>
         </select>
         <div class="show-if-b" style="display:none">b is selected</div>
       </tr>
       <tr>
          <select style="float:left" class="select-class" id="select-id" asp-for="SelectExample">
            <option value="a">a</option>
            <option value="b">b</option>
         </select>
         <div class="show-if-b" style="display:none">b is selected</div>
       </tr>
       <tr>
          <select style="float:left" class="select-class" id="select-id" asp-for="SelectExample">
            <option value="a">a</option>
            <option value="b">b</option>
         </select>
         <div class="show-if-b" style="display:none">b is selected</div>
       </tr>
    </table>    
</div>

票数 1
EN

Stack Overflow用户

发布于 2017-06-28 13:45:29

将“折叠”类添加到div中,并尝试使用以下css和javascript代码(这将根据选定的值隐藏和取消div ):HTML:

代码语言:javascript
复制
<div class="show-if-b collapsed">b is selected</div> 

CSS:

代码语言:javascript
复制
 .collapsed{
      display : none;
    } 

Javascript:

代码语言:javascript
复制
$(document).on("change","#select-id",function(){
    if($(this).val() == "b"){
        $(".show-if-b").removeClass("collapsed");
    }
    else{
      $(".show-if-b").addClass("collapsed");
    }
});

如果您希望在页面加载中选择"b“选项,也可以使用下面的代码

代码语言:javascript
复制
 $(document).ready(function(){
           $("#select-id").val("b");
           $(".show-if-b").removeClass("collapsed");
        });
票数 0
EN

Stack Overflow用户

发布于 2017-06-28 15:40:03

虽然上面的@ use 8175473的答案是可行的,但我发现我也可以使用jQuery的.each()和.find()函数循环遍历每个集合:

代码语言:javascript
复制
$(".collection").each(function (index)
{
    if ($(this).find("#select-id").val() === "b")
    {
        $(this).find(".show-if-b").show();
    }
    else
    {
        $(this).find(".show-if-b").hide();
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44804178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档