1

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

<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”元素,我需要显示“show-if-b”div,否则它需要隐藏。此逻辑需要在选择的更改页面加载时运行(可以保存“b”),因此我并不总是有要附加的事件。

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

任何帮助是极大的赞赏。

4

3 回答 3

1

您可以使用$(this).next()inon("change")选择具有"b is selected". 我将这些元素样式设置为默认显示无,但您可以根据模型初始值更改此 css 属性。您可以实现如下。

$(".collection .select-class").on("change", function(){
     var val = $(this).val();
     if(val == "a")
     {
         $(this).next().hide();
     }
     else
     {
         $(this).next().show();
     }
     
     
})
<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>

于 2017-06-28T14:52:52.070 回答
0

将“collapsed”类添加到 div 并尝试使用下面的 css 和 javascript 代码(这将根据所选值隐藏和取消隐藏 div): HTML:

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

CSS:

 .collapsed{
      display : none;
    } 

Javascript:

$(document).on("change","#select-id",function(){
    if($(this).val() == "b"){
        $(".show-if-b").removeClass("collapsed");
    }
    else{
      $(".show-if-b").addClass("collapsed");
    }
});

如果您希望在页面加载时选择选项“b”,请使用下面的代码

 $(document).ready(function(){
           $("#select-id").val("b");
           $(".show-if-b").removeClass("collapsed");
        });
于 2017-06-28T13:45:29.103 回答
0

虽然上面@user8175473 的回答会起作用,但我发现我还可以使用jQuery 的 .each() 和 .find() 函数来循环遍历每个集合:

$(".collection").each(function (index)
{
    if ($(this).find("#select-id").val() === "b")
    {
        $(this).find(".show-if-b").show();
    }
    else
    {
        $(this).find(".show-if-b").hide();
    }
});
于 2017-06-28T15:40:03.467 回答