为什么不执行此javascript
我有一个文本框,我只想显示为什么不执行此javascript,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,我有一个文本框,我只想显示Model.SelectedSubProcessID的值是否为-2 <script> $(function () { $('#subProcessAdditionalDiv').hide(); }); </script> <div id="modifyForm" class="incidentBox" style="justify-content: flex-start !important; width:
Model.SelectedSubProcessID
的值是否为-2
<script>
$(function () {
$('#subProcessAdditionalDiv').hide();
});
</script>
<div id="modifyForm" class="incidentBox" style="justify-content: flex-start !important; width: auto !important; padding-left: 20px; text-align: left; align-items: flex-start !important;">
...
if (Model.SelectedSubProcessID == -2)
{
<script type="text/javascript">
$('#subProcessAdditionalDiv').show();
</script>
}
...
</div>
<br />
<div id="subProcessAdditionalDiv" style="display:flex; margin-bottom:10px">
@Html.LabelFor(m => m.SelectedSubProcessName, new { style = "margin-top: 2px" })<span> </span>
@Html.TextBoxFor(m => m.SelectedSubProcessName, new { style = "width:500px; margin-left: 120px" })<span> </span>
@Html.ValidationMessageFor(m => m.SelectedSubProcessName)
</div>
$(函数(){
$('#subProcessAdditionalDiv').hide();
});
...
if(Model.SelectedSubProcessID==-2)
{
$('#subProcessAdditionalDiv').show();
}
...
@LabelFor(m=>m.SelectedSubProcessName,新的{style=“margin top:2px”})
@Html.TextBoxFor(m=>m.SelectedSubProcessName,new{style=“width:500px;margin left:120px”})
@Html.ValidationMessageFor(m=>m.SelectedSubProcessName)
即使if语句为true,行
$('#subProcessAdditionalDiv').show()也是如此代码>不执行,文本框保持隐藏,这是为什么?您忘记像前面一样将语句包装到文档的就绪处理程序中:
$(function () {
$('#subProcessAdditionalDiv').show();
});
由于不使用文档的ready处理程序,代码试图在浏览器解析文档时立即执行,并且目标元素还不存在,因为它位于文档的后面。因此,代码在您的示例中运行,jQuery选择器根本找不到任何要显示的匹配元素
请注意,将两个互斥语句放入文档的就绪处理程序中可能会起作用,但如果不能保证它们的执行顺序,那么仅将条件包装在其中一个语句周围是否更有意义?完全删除顶部的元素(调用.hide()
),并在默认情况下设置隐藏元素的样式。然后对.show()
的条件调用将在需要时显示元素。(或将其设置为默认显示,并取消条件以隐藏它。)
此外,您可能根本不需要为此使用JavaScript。只需将元素本身包装在条件中,当条件不满足时,它根本不会发送到客户端:
@if (Model.SelectedSubProcessID == -2)
<div id="subProcessAdditionalDiv" style="display:flex; margin-bottom:10px">
...
</div>
}
@if(Model.SelectedSubProcessID==-2)
...
}
您忘记将语句包装到文档的就绪处理程序中,就像您之前所做的那样:
$(function () {
$('#subProcessAdditionalDiv').show();
});
由于不使用文档的ready处理程序,代码试图在浏览器解析文档时立即执行,并且目标元素还不存在,因为它位于文档的后面。因此,代码在您的示例中运行,jQuery选择器根本找不到任何要显示的匹配元素
请注意,将两个互斥语句放入文档的就绪处理程序中可能会起作用,但如果不能保证它们的执行顺序,那么仅将条件包装在其中一个语句周围是否更有意义?完全删除顶部的元素(调用.hide()
),并在默认情况下设置隐藏元素的样式。然后对.show()
的条件调用将在需要时显示元素。(或将其设置为默认显示,并取消条件以隐藏它。)
此外,您可能根本不需要为此使用JavaScript。只需将元素本身包装在条件中,当条件不满足时,它根本不会发送到客户端:
@if (Model.SelectedSubProcessID == -2)
<div id="subProcessAdditionalDiv" style="display:flex; margin-bottom:10px">
...
</div>
}
@if(Model.SelectedSubProcessID==-2)
...
}
是否提供一个示例?提供一个例子?JSFIDLE?就是这样,我之所以使用javascript,是因为我还希望框根据用户从下拉菜单中选择的内容隐藏/显示。我之所以使用javascript,是因为我还希望框根据用户从下拉菜单中选择的内容隐藏/显示