对于提出这个问题,我觉得真的愚蠢,但现在就这样了。我有一个asp.net页面可能(或可能不)使用Ajax在页面上加载文本框,具体取决于是否满足某些复选框和其他条件。我还需要在某些条件下隐藏这些盒子。对于在加载期间文本框在页面上的用例,文档中的jquery准备好了。对于使用特定用户操作加载文本框的其他用例,文档就绪中的代码将不起作用。我最终把大量的文件准备好了,然后把它放在它自己的一个名为“setup”的函数中,我可以在加载文本框之后调用它。
所以这就是问题:在加载这些文本框后,我无法弄清楚如何设置页面调用。我不能使用.ajaxComplete()(可能是因为asp.net没有使用jquery来加载那些盒子)也不能想到任何其他方式在正确的时间调用setup。我唯一能想到的就是在鼠标悬停时设置页面调用。
这是不必要的贪婪,坦率地说是非常糟糕的代码。加载这些盒子后,有没有一种简单的方法可以调用“setup”?
jQuery(document).ready(function() {
setup("ready");
});
function setup(action)
{
if(action=="ready" || $("#<%=CurrentInventoryMode.ClientID %> option:selected").val()==1)
{
if(!$('#<%=AllowSub.ClientID %>').is(':checked'))
{
$('#<%=InStockUnits.ClientID %>').hide();
$('#<%=LowStockUnits.ClientID %>').hide();
$('#SellAsSpan').hide();
$('#<%=SellAsUnit.ClientID %>').hide();
}
if($("#<%=SellAsUnit.ClientID %> option:selected").val()==4)
{
removeWeight();
}else{
removeMeasure();
}
}
}
$('body').mouseover(function()
{
//there has GOT to be a better way....
setup();
});
修改 以下是执行ajax调用的代码部分。它是一个ajax更新面板
<ajax:UpdatePanel ID="InventoryAjax" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:DropDownList ID="CurrentInventoryMode" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CurrentInventoryMode_SelectedIndexChanged" onclick="setup();">
<asp:ListItem Value="0" Text="Disabled"/>
<asp:ListItem Value="1" Text="Track Product"/>
<asp:ListItem Value="2" Text="Track Variants"/>
</asp:DropDownList>
我尝试将设置放入onclick,但是在加载框之前它会触发,因此它的价值毫无价值:(。
答案 0 :(得分:1)
UpdatePanels在更新时替换HTML。所以新的HTML需要反弹。这是一个javascript块,可以帮助您:
function pageLoaded(sender, args) {
// There are two arrays (created and updated). Treat them separately if if makes sense
var updatePanels = args.get_panelsUpdated().concat(args.get_panelsCreated());
for (var i = 0; i < updatePanels.length; i++) {
if (updatePanels[i].id == "<%= UpdatePanel1.ClientID %>"){
// code to bind contents of UpdatePanel1
}
}
}
$(document).ready(function () {
// Handle updatepanel updates
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
});