Я сделал простой аккордеон для своего сайта с помощью jQuery ... Он отлично работал, но недавно я начал работать над изменением, при котором, если вы щелкнете заголовок открытого в данный момент сегмента (интерактивная область для перемещения вверх / вниз), он должен закрыть текущий раздел.
var sideMenu = {
activated: {},
setup: function() {
$('.menu-category-heading').bind('click', function() {
sideMenu.slideMenu($('ul', $(this).parent()));
});
},
slideMenu: function(menuObj) {
if (sideMenu.activated == menuObj) {
$(sideMenu.activated).slideUp(400);
sideMenu.activated = null;
console.info('same');
} else {
$(sideMenu.activated).slideUp(400);
menuObj.slideDown(500);
sideMenu.activated = menuObj;
console.info('new');
}
}
}
По какой-то причине сравнение никогда не работает ... оно работает, если я добавляю $ (menuObj) .attr ('id') и то же самое для активированного. Но это не идеально, поскольку не все элементы будут иметь атрибут id.
Есть предложения, как заставить работать сравнение объектов? Или какие-нибудь другие советы?
Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вероятно, вы сохраняете объект jQuery (результат вызова $), а не собственный элемент. Каждый раз, когда вы выполняете $ (myEl), создается новый объект, и ссылки не будут совпадать, но собственный элемент будет. Пытаться:
if (slideMenu.activated[0] == menuObj[0]) {
...
}