我想相同的功能,但接受的答案達不到。除此之外,如果您有多個級別的菜單,則不起作用。我修改了源代碼中的Plugin.prototype._itemClick函數以更好地處理此問題。我絕不希望在同一級別打開多個菜單,但可以添加一個設置選項以繞過我的注入代碼。如果你已經添加了一個,這個修改也將確保你的關閉處理程序被觸發。我已評論我添加的代碼:
Plugin.prototype._itemClick = function (el) {
var $this = this;
var settings = $this.settings;
var data = el.data('menu');
if (!data) {
data = {};
data.arrow = el.children('.' + prefix + '_arrow');
data.ul = el.next('ul');
data.parent = el.parent();
//Separated parent link structure
if (data.parent.hasClass(prefix + '_parent-link')) {
data.parent = el.parent().parent();
data.ul = el.parent().next('ul');
}
el.data('menu', data);
}
if (data.parent.hasClass(prefix + '_collapsed')) {
// **** Begin custom code ****
data.parent.siblings('.slicknav_open').each(function() {
var $li = $(this);
var $el = $li.children('a');
var $ul = $el.next('ul');
$el.children('.' + prefix + '_arrow').html(settings.closedSymbol);
$li.addClass(prefix + '_collapsed').addClass(prefix + '_animating').removeClass(prefix + '_open');
$this._visibilityToggle($ul, $li, true, $el);
});
// **** End custom code ****
data.arrow.html(settings.openedSymbol);
data.parent.removeClass(prefix + '_collapsed');
data.parent.addClass(prefix + '_open');
data.parent.addClass(prefix + '_animating');
$this._visibilityToggle(data.ul, data.parent, true, el);
} else {
data.arrow.html(settings.closedSymbol);
data.parent.addClass(prefix + '_collapsed');
data.parent.removeClass(prefix + '_open');
data.parent.addClass(prefix + '_animating');
$this._visibilityToggle(data.ul, data.parent, true, el);
}
};
我希望這可以幫助任何需要此功能的人。
這是什麼運氣? – pmandell