使用单选按钮列表中的选择更改图像
本文关键字:选择 图像 单选按钮 列表 | 更新日期: 2023-09-27 18:00:29
我有一个项目,它让我有点纠结于如何以我想要的方式进行。在ASP.net的一个页面上,我有一个表格,它使用单选列表作为选择选项。此外,我在类别右侧有图像,当选择特定的单选值时,我想更改这些图像。
我已经研究了如何使用常规单选按钮控件来实现这一点,但我似乎无法克服困难,因为我正在使用ASP RadioList控件,我需要关于为什么我无法使用以下代码更改图像的指导:
<script type='text/javascript'>
$(document).ready(function () {
$("input:radio[name=option]").click(function () {
var value = $(this).val();
var image_name;
if (value == 'AMD') {
image_name = "AMD_CPU_1.jpg";
} else {
if (value == 'Intel') {
image_name = "Intel_CPU_2.jpg";
} else {
image_name = "Icon_CPU.jpg";
}
}
});
});
</script>
我在这里使用的是J-Query,我的页面在加载时不会爆炸——但当我选择一个值时,图像不会改变。至于代码的[name=option]
部分,我在HTML代码源中没有name="option"
。。。我有以下内容:
<tr>
<td><input id="MainContent_CPUBuilderForm1_radCPUType_0" type="radio" name="ctl00$MainContent$CPUBuilderForm1$radCPUType" value="AMD" /><label for="MainContent_CPUBuilderForm1_radCPUType_0">AMD</label></td>
</tr>
其中name="ctl00$MainContent$CPUBuilderForm1$radCPUType"
。
我试着插入这个作为"选项"的替代,但仍然没有骰子。有人能帮我评估一下我做错了什么吗?万分感谢!干杯
您遇到的问题是没有将图像URI的值分配给<img>
标记。所以你需要在函数的底部添加一些东西来进行赋值。由于您的问题中没有HTML,我将在编写答案时假设您的代码中有一个标记:<img id="changingImage" src="" alt="" />
。
因此,只需在函数关闭之前将其添加到Javascript中即可:
$('#changingImage').attr('src', '../Images/' + image_name);
这应该可以让它为你更改文件,考虑到你可能需要根据你的配置更改它所在的文件夹。
使用此HTML
<div>
<asp:RadioButtonList ID="RadioButtonTipoUser" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Selected="true" Value="1">Dome</asp:ListItem>
<asp:ListItem Value="amd">Emp</asp:ListItem>
<asp:ListItem Value="intel">intel</asp:ListItem>
</asp:RadioButtonList>
<asp:Image ID="img" runat="server" ImageUrl="~/Desert.jpg" />
</div>
查询
$(document).ready(function () {
$('#RadioButtonTipoUser_1').on('change', function () {
if ($(this).is(':checked')) {
$('#img').attr('src', 'Chrysanthemum.jpg');
}
});
$('#RadioButtonTipoUser_2').on('change', function () {
if ($(this).is(':checked')) {
$('#img').attr('src', 'Desert.jpg');
}
});
});
</script>
欢迎来到ASP.net Web Forms Name/ID Mangling的奇妙世界。
更新
已经确定您正在使用asp.net图像标记。请注意,您不必对图像使用asp.net控件,您可以使用带有ID的普通旧HTML控件;这个身份证不会被篡改。不过,我现在还是坚持使用asp.net图像控件。
这需要您的脚本在页面上,而不是在js文件中。
.aspx
<asp:RadioBUttonList ID="yourID" runat="server" />
<asp:Image ID="Image6" runat="server" ImageUrl="~/Images/Icon_CPU.jpg" />
javascript
$(document).ready(function () {
$("#<%= yourID.ClientID %> input").click(function () {
var value = $(this).val();
var image_name;
var image_path = "/Images/";
//If the images directory isn't at the website root you could use asp.nets
//resolveURL method instead
if (value == 'AMD') {
image_name = "AMD_CPU_1.jpg";
} else {
if (value == 'Intel') {
image_name = "Intel_CPU_2.jpg";
} else {
image_name = "Icon_CPU.jpg";
}
}
//console.log(image_name);
$("#<%= Image6.ClientID %>").attr('src', image_path + image_name);
});
});
<% %>
是一个服务器代码块,应该在aspx页面中谨慎使用。<%= %>
是`<%的缩写回答写入()%>。如果你查看页面的源代码,你会看到单选按钮列表的ASP.net客户端ID;jQuery选择器中的图像控件。
如果出现意外结果,您还应该使用FireBug for Firefox或Chrome开发工具等工具,在单击复选框后检查图像的路径。还要注意行//console.log(image_name);
。从此行中删除注释将把image_name的值转储到控制台,这对调试很有用。点击此处查看更多信息:http://blogs.msdn.com/b/cdndevs/archive/2011/05/26/console-log-say-goodbye-to-javascript-alerts-for-debugging.aspx
下面的上一个代码-不涉及更新图像
一个巧妙的解决方案是用div
或更好的fieldset
包围你的单选按钮列表,并给它一个id:
<div id="listContainer">
<asp:RadioButtonList ID="yourID" runat="server" />
<div>
现在将您的javascript更新为
$(document).ready(function () {
$("#listContainer input").click(function () {
var value = $(this).val();
var image_name;
if (value == 'AMD') {
image_name = "AMD_CPU_1.jpg";
} else {
if (value == 'Intel') {
image_name = "Intel_CPU_2.jpg";
} else {
image_name = "Icon_CPU.jpg";
}
}
});
});