У меня есть страница динамически созданных складных элементов JQuery 1.3.1 (не в наборе аккордеона), и я пытаюсь сохранить развернутое или свернутое состояние каждого элемента. Складные элементы прекрасно работают без каких-либо обработчиков. Мой код для подключения обработчиков находится здесь, который я вызываю в pagebeforeshow
(я пробовал и в pageshow
):
function bindCollapsibleHistoryHandlers(){
function getHandler(field, value){
var handler = function(event, ui){
var element = event.target.id;
var id = (element.split('-'))[1];
var status = window.mam_history.status('meetings', id);
if (null == status){
status = { "open": false, "note_open": false, "dist_open": false };
}
status[field] = value;
var new_status = null;
window.mam_history.status('meetings', id, status);
return true;
}
return handler;
}
$('.mtg_item').off('collapsiblecollapse');
$('.mtg_item').on('collapsible', getHandler('open', false));
$('.mtg_item').off('collapsibleexpand');
$('.mtg_item').on('collapsibleexpand', getHandler('open', true));
$('.dist_info').off('collapsiblecollapse');
$('.dist_info').on('collapsiblecollapse', getHandler('dist_open', false));
$('.dist_info').off('collapsibleexpand');
$('.dist_info').on('collapsibleexpand', getHandler('dist_open', true));
}
Один из HTML-элементов выглядит в инспекторе Chrome так:
Согласно документации JQuery Mobile 1.3.1, перехватываются следующие события: collapsiblecollapse
и collapsibleexpand
. Когда я пытаюсь использовать их, обработчики событий никогда не вызываются. Глядя в Интернете, я заменил эти события на collapse
и expand
. При этом обработчик событий будет вызываться при нажатии на сворачиваемый виджет, но сворачиваемый виджет не будет сворачиваться или расширяться ни до, ни после запуска обработчика. Это не только визуальная проблема, потому что состояние разборки, прочитанное с помощью .collapsible('option', 'collapsed')
, также не изменилось.
Внутри обработчика я пробовал различные комбинации добавления или удаления класса ui-collapsible-collapsed
или установки опции collapsible
перед .trigger('create')
и даже активации collapsiblecollapse
и collapsibleexpand
внутри обработчика (конечно, когда он был привязан к collapse
и expand
). Удаление строк .off()
ничего не изменило (не представляю, почему). Ничто из того, что я пробовал до сих пор, не приведет к сворачиванию или расширению складного объекта при нажатии, когда обработчик фактически запускается, будучи привязанным к collapse
или expand
. Неважно, какой код на самом деле находится в обработчике или есть ли у меня атрибут data-collapsed
в теге <div>
для начала или нет.
Так что, похоже, мне что-то не хватает, и я был бы признателен за любую помощь, чтобы увидеть ошибку на моем пути.