Будет ли этот jscript работать на странице .ASCX? - PullRequest
0 голосов
/ 12 октября 2009

Будет ли это выполняться внутри файла ASCX в моем проекте ASP.Net? Кажется, я не могу заставить его работать, просто удивляюсь, не пропала ли какая-то конкретная вещь? Нужно ли включать "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 ]

3 голосов
/ 12 октября 2009

Похоже, что эта функция JavaScript пытается ссылаться на свойства веб-элемента управления ASP.NET, которые недоступны со стороны клиента. Однако вы можете ссылаться на объекты HTML, которые выводятся на страницу через ASP.NET, вместе с их атрибутами.

Предполагая, что ваш код JavaScript является кодом в коде .ascx, измените эту строку:

var images = document.getElementById("GetQuote").getAttribute("ImageUrl");

К этому:

var images = document.getElementById('<%=GetQuote.ClientID%>').getAttribute("src");

Для этого нужно вставить идентификатор клиента, который ASP.NET создает для элемента управления GetQuote Image, чтобы на него можно было ссылаться со стороны клиента. Он также ссылается на правильный атрибут элемента HTML img (src), который соответствует свойству ImageUrl серверного элемента управления Image.

EDIT: Я заметил, увидев ответ TheVillageIdiot (и прочитав ваш код немного более внимательно, что я должен был сделать изначально), вы пытаетесь использовать переменную images в качестве массива. Возможно, вы пытаетесь сопоставить несколько элементов изображения, которые содержат текст «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 голос
/ 12 октября 2009

Вам не нужен runat = "server", потому что это код, который будет выполняться на клиенте. Это должно работать, но, возможно, у вас возникли проблемы, потому что вы ссылаетесь на идентификаторы элементов, которые являются элементами управления asp.net? Это будет означать, что ваши значения ID не будут совпадать. Если это так, вы могли бы решить эту проблему, используя control.ClientID, перенаправленный на серверную часть JavaScript, чтобы они соответствовали.

0 голосов
/ 12 октября 2009

Если 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");
}
...