我正在使用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“元素,我需要显示”hide b“div,否则它需要隐藏。当页面加载("b“可以保存)时,这个逻辑需要在select 和的更改上运行,所以我并不总是要附加一个事件。
我对jQuery .closest()、.find()和.parents()尝试过不同的方法,但似乎无法在每个集合中获得特定的选择值。
任何帮助都是非常感谢的。
发布于 2017-06-28 14:52:52
您可以在$(this).next()中使用on("change")来选择包含"b is selected"的每个div元素。我将这些元素样式“无”设置为默认值,但您可以根据模型初始值更改此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-28 13:45:29
将“折叠”类添加到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-28 15:40:03
虽然上面的@ use 8175473的答案是可行的,但我发现我也可以使用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();
}
});https://stackoverflow.com/questions/44804178
复制相似问题