0

これは、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]-->
4

3 に答える 3

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 が GetQuoteImageコントロール用に作成したクライアント ID が挿入され、クライアント側から参照できるようになります。また、サーバー側コントロールのプロパティに対応するHTMLimg要素 ( ) の適切な属性も参照します。srcImageUrlImage

編集: 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;
        }
    }
};
于 2009-10-12T13:49:22.957 に答える
1

これはクライアントで実行されるコードであるため、runat="server" は必要ありません。動作するはずですが、asp.net コントロールであるアイテムの ID を参照しているため、問題が発生している可能性がありますか? これは、ID 値が一致しないことを意味します。その場合は、control.ClientID を JavaScript サーバー側にレッドンダリングして一致させることで、これを解決できます。

于 2009-10-12T13:47:40.480 に答える
0

GetQuoteが aspx 要素である場合は、それを次のように置き換える必要があります<%= GetQuote.ClientID %>ImageUrlsrc

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

また、画像は文字列の配列ではなく 1 つの文字列にする必要があるため、ループにも問題があります。代わりにこれを試してください:

var image = document.getElementById('<%=GetQuote.ClientID%>').

if(images){
      var src = image.GetAttribute("src");
      image.SetAttribute("src",src.replace(".png", ".gif");
}
于 2009-10-12T13:57:04.703 に答える