【发布时间】:2023-03-24 17:46:02
【问题描述】:
我正在开发一个显示一些图块的网站。瓷砖的高度可能会因插入的图像和文本而异。为了确保所有的瓷砖都达到相同的高度,我在 head 中编写了以下脚本:
function BindEvents()
{
$(window).load(function ()
{
var maxHeight = Math.max.apply(null, $(".producttile").map(function () {
return $(this).height();
}).get());
$('.producttile').height(maxHeight);
maxHeight = Math.max.apply(null, $(".clistdiv").map(function () {
return $(this).height();
}).get());
$('.clistdiv').height(maxHeight);
});
}
以上脚本已绑定到datalist,如下:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<hr width="100%" noshade/>
<script type="text/javascript">
Sys.Application.add_load(BindEvents);
</script>
<asp:DataList
ID="DataList1"
runat="server"
onitemcommand="DataList1_ItemCommand1"
class="itemsdatalist"
RepeatDirection="Horizontal"
RepeatLayout="Flow"
onload="DataList1_Load">
<ItemTemplate>
...........rest of the code
现在,首次加载页面时,这种绑定和磁贴自动调整大小可以正常工作。一个按钮会触发一个 ajax 调用并引入更多图块并重新更新此更新面板。这就是问题所在。
BindEvents() 没有被再次调用,因此瓷砖大小不同,它们不会再次自动调整。
我也尝试将脚本保留在更新面板内容模板中,希望它能够正常工作,但难怪,它根本没有工作。
请帮忙。
【问题讨论】:
-
尝试使用 $("#UpdatePanel1").load 而不是 $(window).load
-
您好,我已经尝试过您的解决方案,其中包含更新面板控件的类和 ID,但没有一种方法有效。
-
我会尝试完全删除 window.load,因为每次加载 ContentTemplate 时都会调用此函数,对吗?我会在你的 BindEvents 函数中做一个 console.log,看看它什么时候被调用。
-
好的,我写了 3 个脚本:在 head 部分,我写了一个带有一些消息的 console.log 语句,然后在内容模板中,我用 console.log 写了另一个脚本,并在内容结束时模板,另一个console.log。在第一次加载页面时,所有三条消息都显示在日志中,但在部分回发时,它们都没有再次显示。意味着,没有一个脚本在部分 postbak 上工作。
标签: javascript jquery asp.net ajax