Почему в 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 и перегоните код. ИМХО: избавление от сервера ускоряет процесс отладки.
Я никогда не придумал однозначного ответа на то, что вызвало это, но, тщательно воссоздав элемент управления, я создал еще один, который работал и постепенно переместил функциональность с плохого управления на хорошее. Мне удалось выделить что-то в объявлении элемента управления, но это настолько близко, насколько я понял.