Почему в jQuery нельзя найти складную панель

У меня есть девять складных панелей на странице. Я могу развернуть или свернуть их из кода jQuery или C#. Все работало нормально, пока я что-то не сломал, и теперь $find(cpe) возвращает ноль для двух из девяти.

Панели определены и видимы для C#, но их настройки externalHTML в DOM (Firebug) указывают на проблему:

Эти работы:

<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>

Я попытался установить ClientState в C#, и код выполняется, но код jQuery все еще не может найти элемент управления. IE Это работает, когда pn="cpGeneral", но не работает, когда pn="cpDuties':

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

Вот изображение из FireBug. Обратите внимание, что "истина" отсутствует в двух из девяти:

2 ответа

Я не вижу причин, по которым эти двое не должны работать. Я считаю, что это связано с вводом данных.
Но потому что это быстрая проверка:
1) Попробуйте другой браузер. И другой.
Если они все ведут себя одинаково
2) Убедитесь, что входные данные для addPanelHandler полностью верны. Если они есть - найдите кого-то, чтобы резиновые утки входы и проблемы с.
3) Если проблема не устранена: временно отключите aspnet, скопируйте / вставьте код в HTML и перегоните код. ИМХО: избавление от сервера ускоряет процесс отладки.


Я никогда не придумал однозначного ответа на то, что вызвало это, но, тщательно воссоздав элемент управления, я создал еще один, который работал и постепенно переместил функциональность с плохого управления на хорошее. Мне удалось выделить что-то в объявлении элемента управления, но это настолько близко, насколько я понял.

Другие вопросы по тегам