这会在我的ASP.Net项目中的ASCX文件中运行吗? 我似乎无法让它工作,只是想知道是否有某些特殊的东西丢失了?我需要包含“runat =”server“”吗?
<!--[if lte IE 6]>
<script type="text/javascript">
window.onload = function() {
var images = document.getElementById("GetQuote").getAttribute("ImageUrl");
for (var i = 0; i < images.length; i++) {
var image_png_src = images[i].src;
var image_gif_src = image_png_src.replace(".png", ".gif");
images[i].src = image_gif_src;
}
};
</script>
<![endif]-->
答案 0 :(得分:3)
看来这个JavaScript函数试图引用ASP.NET Web控件属性,这些属性无法从客户端访问。但是,您可以引用ASP.NET输出到页面的HTML实体及其属性。
假设您的JavaScript代码是.ascx代码中的代码,请更改以下行:
var images = document.getElementById("GetQuote").getAttribute("ImageUrl");
对此:
var images = document.getElementById('<%=GetQuote.ClientID%>').getAttribute("src");
这样做是插入ASP.NET为GetQuote Image
控件创建的客户端ID,以便可以从客户端引用它。它还引用了HTML img
元素(src
)的正确属性,该属性对应于服务器端ImageUrl
控件的Image
属性。
编辑:
我注意到在看到TheVillageIdiot的响应(并且更仔细地阅读你的代码,我本来应该做的)之后,你试图将images
变量用作数组。看起来您可能正在尝试匹配其ID中包含文本“GetQuote”的多个图像元素(如GetQuote1,GetQuote2等)。
假设您需要在客户端执行此操作,并且您没有使用像jQuery这样的框架,请尝试以下操作:
window.onload = function()
{
// get all img elements on the page and load them into an array
var images = document.getElementsByTagName("img");
// iterate through the image array
for (var i = 0; i < images.length; i++)
{
// check that the current image's id contains "GetQuote" (case sensitive)
if (images[i].id.indexOf("GetQuote") >= 0)
{
var image_png_src = images[i].src;
var image_gif_src = image_png_src.replace(".png", ".gif");
images[i].src = image_gif_src;
}
}
};
答案 1 :(得分:1)
您不需要runat =“server”,因为这是将在客户端上运行的代码。它应该工作,但也许你有问题因为你在asp.net控件的项目上引用ID?这意味着您的ID值不匹配。如果是这样,你可以通过使用重定向到JavaScript服务器端的control.ClientID来解决这个问题。
答案 2 :(得分:0)
如果 GetQuote 是一个aspx元素,那么您需要将<%= GetQuote.ClientID %>
和ImageUrl
替换为src
var images = document.getElementById('<%=GetQuote.ClientID%>')
.getAttribute("src");
此外,图像应该是一个字符串而不是字符串数组,因此您的循环也有问题。试试这个:
var image = document.getElementById('<%=GetQuote.ClientID%>').
if(images){
var src = image.GetAttribute("src");
image.SetAttribute("src",src.replace(".png", ".gif");
}