我正在主页面中使用带有脚本管理器的主页面和内容页面。内容页面应显示搜索查询的结果以及与这些结果相关的一些图像。为了提高响应时间,我使用内容页面的aspx文件中定义的javascript pageLoad()函数加载图像。结果使用放置在更新面板内的中继器控件显示。中继器控件发出div元素来保存结果描述,另一个div元素保存图像。最初图像div是空的。放置在内容页面部分的pageLoad函数如下所示。Javascript页面加载功能不适用于主页面和内容页面
function pageLoad() {
var anchors = document.getElementsByName("resultAnchor");
var count = anchors.length;
var href = "";
for (var i = 0; i < count; i++) {
href = anchors[i].href;
if ((i % 2) == 0) {
document.getElementById("SearchResultsContent_webRepeater_ImagePanel_" + i).innerHtml = href;
}
else {
document.getElementById("SearchResultsContent_webRepeater_altImagePanel_" + i).innerHtml = href;
}
}
}
转发器控制代码如下所示。
<asp:Repeater ID="webRepeater" runat="server" >
<ItemTemplate>
<div id="resultControl" class="resultControl" runat="server">
<div class="headerImage">
<img src='<%# Eval("Favicon") %>' alt="" class="favicon"/>
</div>
<div class="resultInfo">
<a href='<%# Eval("Url") %>' class="resultTitle" name="resultAnchor"><%# Eval("Title") %></a>
<br />
<span class="resultDescription"><%# Eval("Description") %></span>
<br />
<span class="resultDisplayLink"><%# Eval("DisplayLink") %></span>
<span class="resultFoundOn">Found On: <%# Eval("FoundOn") %></span>
<br />
<div id="imagePanel" class="ImagePanel" runat="server" />
</div>
<br />
</div>
</ItemTemplate>
//同的ItemTemplate与命名为altImagePanel
SearchResultsContent图像面板是在asp:其中中继器被放置内容的ID。问题是pageLoad中设置ImagePanel的innerHtml的语句抛出异常,说没有找到SearchResultsContent_webRepeater_ImagePanel_X。我查看了HTML源代码,它将ImagePanel的ID显示为SearchResultsContent_webRepeater_ImagePanel_X,其中X是一个数字。但是,如果我使用单个ASPX页面而不使用母版页,则此方法正常工作。 有没有人有任何想法我做错了什么,或者我需要做什么来使这个主页和内容页面的工作?
谢谢,
我浏览了运行页面时生成的整个html。图像面板div具有唯一ID,名称为SearchResultsContent_webRepeater_ImagePanel_X,其中X是指示其索引的数字。代码位于内容页面中。我没有使用任何iframe。我只是想知道为什么相同的逻辑将工作,如果没有母版页,但无法检测到母版页时使用的图像面板div。 – naveen 2011-06-16 19:10:44
试试这个 - 在页面最底部放一个按钮。分配其onclick =“pageLoad()”,看看是否有效。等到页面完全加载并尝试。我想知道这是否是代码位置的问题,以及何时被调用。 – 2011-06-16 20:53:00
谢谢你的建议。我添加一个'if'语句来检查图像面板是否可用。此外,将代码移动到页面的较低部分似乎会产生较少数量的未找到元素的错误。 – naveen 2011-06-17 05:18:04