在单选按钮列表中选择选项时更改图像
本文关键字:图像 选项 选择 单选按钮 列表 | 更新日期: 2023-09-27 18:01:03
注意:这是一个反复提出的问题,旨在更清楚地陈述问题和信息 。
好的。。。我正在为我的一个网站做一个项目,该网站有一个表单,并对项目类别使用RadioButtonList控件。在一个特定的类别上,我的无线电列表控件有4个类似的吹嘘:
<td>
<asp:RadioButtonList ID="radCPUType" RepeatDirection="Horizontal" runat="server">
<asp:ListItem Value="AMD">AMD</asp:ListItem>
<asp:ListItem Value="Intel">Intel</asp:ListItem>
<asp:ListItem Value="AMD Dual (Server)">AMD Dual (Server)</asp:ListItem>
<asp:ListItem Value="Intel Dual (Server)">Intel Dual (Server)</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:Image ID="Image6" runat="server" ImageUrl="~/Images/Icon_CPU.jpg" />
</td>
在列表控件旁边,我有一个名为Image6
的默认图像控件。当我选择单选按钮列表选项时,我很难更改此图像。代码没有爆炸,但什么也没发生,并且单选选项选择上的图像保持不变。我从类似的例子中尝试了各种方法,但都没有帮助。
我已经为我的脚本和普通的旧JavaScript尝试了JQuery,但都没有用。我知道我需要让脚本引用我在解决方案的images目录中的图像,但我无法解决。默认图像为Icon_CPU.jpg
,对于每个选项,例如。。。前两个,它将更改为以下内容:
- AMD选择=
AMD_CPU_1.jpg
- 英特尔选择=
Intel_CPU_2.jpg
等等。如果硬编码,图像会正确对齐——我就是无法让代码进行选择。有人能帮我写剧本吗?此外,您能告诉我是否需要重命名控件,或者在服务器端控件的PageLoad
中添加任何内容吗?目前,我没有任何内容,如下所示。
public partial class Controls_CPUBuilderForm : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnResetBuild_Click(object sender, EventArgs e)
{
// Clear radio button selections on the form
radFormSelect.ClearSelection();
radDriveType.ClearSelection();
radDriveSpace.ClearSelection();
radPSUSelect.ClearSelection();
radRAMSelect.ClearSelection();
radCPUType.ClearSelection();
radOpticalCount.ClearSelection();
radScreenCount.ClearSelection();
// Reset drop down lists to original selection
ddlDriveCount.SelectedIndex = -1;
ddlScreenOrient.SelectedIndex = -1;
}
}
感谢大家的耐心和耐心;知识帮助我更好地理解未来的目的!
要解决C#的问题,请在代码后台为SelectedIndexChanged创建一个事件处理程序。
protected void radCPUType_SelectedIndexChanged(object sender, EventArgs e)
{
// Set the ImageUrl however you like
Image6.ImageUrl = "~/Images/Icon_CPU.jpg";
}
接下来,完善单选按钮列表,将AutoPostBack设置为"True",将OnSelectedIndexChanged设置为"radCPUType_SelectedIndexChangd"
<asp:RadioButtonList ID="radCPUType" RepeatDirection="Horizontal" runat="server" AutoPostBack="True" OnSelectedIndexChanged="radCPUType_SelectedIndexChanged">
<asp:ListItem Value="AMD">AMD</asp:ListItem>
<asp:ListItem Value="Intel">Intel</asp:ListItem>
<asp:ListItem Value="AMD Dual (Server)">AMD Dual (Server)</asp:ListItem>
<asp:ListItem Value="Intel Dual (Server)">Intel Dual (Server)</asp:ListItem>
</asp:RadioButtonList>
感谢大家的建议非常感谢"KENT ANDERSON"——他提供了我可以扩展的框架,以获得我想要的功能。
也就是说,答案是在控件的CodeBehind中创建一个事件处理程序,如下所示:
protected void radCPUType_SelectedIndexChanged(object sender, EventArgs e)
{
// This was Kent's suggestion, and also to setup the ImageUrl as needed.
Image6.ImageUrl = "~/Images/MyDefault.jpg";
}
在选择控件上的选项之前,我将ImageUrl
设置为初始保持默认图像。接下来,我需要一种方法来填充选中的图像。由于许多建议都有不同的、可能更复杂的实现方法,我发现我可以通过将控制作为参数和赋值传递,通过事件处理程序中的if-else
结构来实现:
protected void radCPUType_SelectedIndexChanged(object sender, EventArgs e)
{
// Setup the ImageUrl.
Image6.ImageUrl = "~/Images/MyDefault.jpg";
// Setup the if-else structure to assign images w/ the selections.
if (radCPUType.SelectedValue == "A selected option value")
{
Image6.ImageUrl = "~/Images/Associated Image.jpg";
}
else if (radCPUType.Selectedvalue == "Another selected option value")
{
Image6.ImageUrl = "~/Images/Another Associated Image.jpg")
}
else
{
Image6.ImageUrl = "~/Images/The Default Image.jpg";
}
}
由于RadioButtonList
控件使用基于值的索引,因此需要SelectedValue
类,以便控件可以保存单选列表的HTML中指定的选项选择。
if
部分中的控件等于单选按钮列表上选择的选项;然后,下一个语句将与选项选择相关联的图像分配给ImageUrl
,我当然使用else if
来浏览剩余的无线电列表选项,以结构的结束else
部分中的默认图像结束。这是一个成功!因此,我相信还有其他方法可以实现解决方案,这对我来说最有效
再次感谢您的所有投入,并再次向Kent Anderson致敬,他的建议为我们奠定了基础。
首先让我们将JS事件附加到代码绑定中
radCPUType.Attributes.Add("onclick", "changeImage();");
然后我们需要创建JS函数。
<script type="text/javascript">
function changeImage() {
var img = $('#<%=radCPUType.ClientID %>');
switch ($('#<%=radCPUType.ClientID %> input[type=radio]:checked').val())
{
case 'AMD':
img.src = 'newimage.png';
break;
}
}
</script>
我还没有对此进行测试,但如果有什么不起作用,请告诉我。
答案直接取自上一个问题:
aspx
<td>
<asp:RadioButtonList ID="radCPUType" RepeatDirection="Horizontal" runat="server">
<asp:ListItem Value="AMD">AMD</asp:ListItem>
<asp:ListItem Value="Intel">Intel</asp:ListItem>
<asp:ListItem Value="AMD Dual (Server)">AMD Dual (Server)</asp:ListItem>
<asp:ListItem Value="Intel Dual (Server)">Intel Dual (Server)</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:Image ID="Image6" runat="server" ImageUrl="~/Images/Icon_CPU.jpg" />
</td>
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
switch (value)
{
case "AMD":
image_name = '"AMD_CPU_1.jpg";
break;
case "Intel";
image_name = "Intel_CPU_2.jpg"
break;
case "AMD Dual (Server)";
image name = "" // Insert your image here
break;
case "Intel Dual (Server)";
image name = "" // Insert your image here
break;
}
/*************************************
*Old Ineeficient code
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页面中谨慎使用。CCD_ 15是CCD_。如果你在浏览器中查看页面的源HTML代码,你会看到单选按钮列表的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
旁注
我认为这里不需要图像控制。一个普通的旧html图像标签就可以了。如果你使用图像标签,你就不会得到你在原始问题中所做的asp.net名称篡改,可以简单地用$("#Image6")
引用它
如果您不熟悉switch
语句,请参阅以下内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch