为什么在jQuery中找不到可折叠面板

时间:2012-10-19 22:13:50

标签: jquery ajaxcontroltoolkit collapsiblepanelextender

我在页面上有九个可折叠面板。我可以从jQuery或C#代码后面展开或折叠它们。一切正常,直到我破坏了东西,现在$ find(cpe)为九个中的两个返回null。

面板是C#的定义和可见的,但它们在DOM(Firebug)中的outerHTML设置表明了这个问题:

这些工作:

<input name="ctl00$body$cpOutsideSales_ClientState" id="ctl00_body_cpOutsideSales_ClientState" value="true" type="hidden">
<input name="ctl00$body$cpGeneral_ClientState" id="ctl00_body_cpGeneral_ClientState" value="false" type="hidden">

这些不起作用:

<input name="ctl00$body$cpDuties_ClientState" id="ctl00_body_cpDuties_ClientState" type="hidden">
<input name="ctl00$body$cpAnalyst_ClientState" id="ctl00_body_cpAnalyst_ClientState" type="hidden">

问题是缺少“value ='true'”,但我认为没有明显的方法来设置它。以下是一个有效的声明:

<asp:CollapsiblePanelExtender ID="cpGeneral" runat="server" 
    TargetControlID="pnlGeneral" 
    BehaviorID="cpGeneral" 
    TextLabelID="lblGeneral" 
    SuppressPostBack="true" 
    Collapsed="true" 
    ImageControlID="icnGeneral" 
    ExpandControlID="pnlGeneralcp" 
    CollapseControlID="pnlGeneralcp"
    ExpandedText="Collapse" 
    CollapsedText="<b>Position/Organization</b>">
</asp:CollapsiblePanelExtender>

而不是:

<asp:CollapsiblePanelExtender ID="cpDuties" runat="server" 
    TargetControlID="pnlDuties"
    BehaviorID="cpDuties" 
    TextLabelID="lblDuties" 
    SuppressPostBack="true" 
    Collapsed="true"
    ImageControlID="icnDuties" 
    ExpandControlID="pnlDutiescp" 
    CollapseControlID="pnlDutiescp"
    ExpandedText="Collapse" 
    CollapsedText="<b>Duties</b>">
</asp:CollapsiblePanelExtender>

我尝试在C#中设置ClientState,代码执行,但jQuery代码仍无法找到控件。 I.E.这在pn =“cpGeneral”时有效,但在pn =“cpDuties'时失败:

function addPanelHandler(panel, pn) {
    extender = $find(pn);
    if (extender != null) {
        extender.add_expanded(function () {
            loadPanel(panel, pn);
        });
    }
}

这是来自FireBug的图片。请注意,九个中的两个中缺少“true”: enter image description here

2 个答案:

答案 0 :(得分:0)

我认为两者不应该起作用。我相信这是输入/数据相关的 但因为这是一个快速检查:
1)尝试其他浏览器。另一个。
如果它们的行为方式相同:
2)确保addPanelHandler的输入完全正确。如果他们是 - 找人rubber duck输入和问题。
3)如果你仍然有问题:暂时放弃aspnet并将代码复制/粘贴到HTML中并提取代码。恕我直言:摆脱服务器紧固调试周转。


答案 1 :(得分:-1)

我从来没有想出一个明确的答案来解决这个问题,但是通过仔细地重新创建控件,我创建了另一个有效的工具,并逐渐将功能从糟糕的控制转移到了良好的控制。我能够将它隔离到控件声明中的某些内容,但这与我得到的一样接近。