这个jscript会在.ASCX页面内运行吗?

时间:2009-10-12 13:43:24

标签: asp.net javascript ascx

这会在我的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]-->

3 个答案:

答案 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");
}