【发布时间】:2019-02-21 16:00:07
【问题描述】:
当我在下拉菜单中选择一种语言时,匹配的语言图像应该出现在它旁边的 div 中,从而使不相关的图像不可见。我无法让它工作,我一直在尝试使用 display: none; 和 block; 和 .hide() .show()
谁能看到我在这里做错了什么?
<form id="form1" runat="server">
<div id="navLanguage">
<asp:DropDownList ID="ddlLanguages" runat="server" AutoPostBack="True" >
<asp:ListItem Text="English" Value="en-us" />
<asp:ListItem Text="Nederlands" Value="nl" />
<asp:ListItem Text="Português" Value="pt-br" />
</asp:DropDownList>
</div>
</form>
<div ID="Flags" runat="server">
<asp:Image runat="server" ID="FlagUK" imageUrl="Images/Language Icons/FlagUK.png" Value="en-us" />
<asp:Image runat="server" ID="FlagNL" imageUrl="Images/Language Icons/FlagNL.png" Value="nl" />
<asp:Image runat="server" ID="FlagBR" imageUrl="Images/Language Icons/FlagBR.png" Value="pt-br" />
</div>
<script src="https://code.jquery.com/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#ddlLanguages').on ('change', function () {
var selected = $(this).val();
if (selected === "en-us") {
$('#FlagUK').show();
$('#FlagNL').hide();
$('#FlagBR').hide();
}
if (selected === "nl") {
$('#FlagUK').hide();
$('#FlagNL').show();
$('#FlagBR').hide();
}
if (selected === "pt-br") {
$('#FlagUK').hide();
$('#FlagNL').hide();
$('#FlagBR').show();
}
});
});
</script>
【问题讨论】:
-
看起来您正在使用 ASP.Net 网络表单。因此,所有
ID属性或您的runat="server"控件都将在运行时动态更改。如果您在浏览器中检查 DOM,您会发现它们与您的代码所期望的完全不同。要解决此问题,请使用控件的ClientID属性来访问它,或使用类。 -
另请注意,jQuery 1.3.2 确实很古老。您真的需要将其升级到至少 1.12.1,最好是 3.3.1
-
你有autopostback=true,所以如果你选择的时候页面正在发布,那么你的JS永远不会执行。
-
好的...对于这段代码有什么实用的解决方案?
-
@Rory McCrossan:我正在使用带有 MVS 的 ASP.NET。我写的这段代码放在母版页上,难道母版页不需要使用 ClientID 属性吗?此外,当我检查 DOM 时,ID 属性与代码匹配
标签: javascript jquery html asp.net