Нужна помощь по Jquery

#1 15 октября 2014 в 12:00
Есть скрипт


(function($) {
var debugMode = false;

function debug(msg) {
if (!debugMode) { return; }
if (window.console && window.console.log){
window.console.log(msg);
} else {
alert(msg);
}
}

$.fn.accordion = function(config) {
var defaults = {
"handle": "h3",
"panel": ".panel",
"speed": 200,
"easing": "swing",
"canOpenMultiple": false,
"canToggle": false,
"activeClassPanel": "open",
"activeClassLi": "active",
"lockedClass": "locked",
"loadingClass": "loading"
};

if (config) {
$.extend(defaults, config);
}

this.each(function() {
var accordion = $(this),
reset = {
height: 0,
marginTop: 0,
marginBottom: 0,
paddingTop: 0,
paddingBottom: 0
},
panels = accordion.find(">li>" + defaults.panel)
.each(function() {
var el = $(this);
el
.removeClass(defaults.loadingClass)
.css("visibility", "hidden")
.data("dimensions", {
marginTop: el.css("marginTop"),
marginBottom: el.css("marginBottom"),
paddingTop: el.css("paddingTop"),
paddingBottom: el.css("paddingBottom"),
height: this.offsetHeight — parseInt(el.css("paddingTop")) — parseInt(el.css("paddingBottom"))
})
.bind("panel-open.accordion", function(e, clickedLi) {
var panel = $(this);
clickedLi.addClass(defaults.activeClassLi);
panel
.css($.extend({overflow: "hidden"}, reset))
.addClass(defaults.activeClassPanel)
.show()
.animate($.browser.msie && parseInt($.browser.version) < 8? panel.data("dimensions"): $.extend({opacity: 1}, panel.data("dimensions")), {
duration: defaults.speed,
easing: defaults.easing,
queue: false,
complete: function(e) {
if ($.browser.msie) {
this.style.removeAttribute('filter');
}
$(this).removeAttr("style");
}
});
})
.bind("panel-close.accordion", function(e) {
var panel = $(this);
panel.closest("li").removeClass(defaults.activeClassLi);
panel
.removeClass(defaults.activeClassPanel)
.css({
overflow: "hidden"
})
.animate($.browser.msie && parseInt($.browser.version) < 8? reset: $.extend({opacity: 0}, reset), {
duration: defaults.speed,
easing: defaults.easing,
queue: false,
complete: function(e) {
if ($.browser.msie) {
this.style.removeAttribute('filter');
}
panel.hide();
}
});
})
.hide()
.css("visibility", "visible");

return el;
}),
handles = accordion.find(
" > li > "
+ defaults.handle
)
.wrapInner('<a class="accordion-opener" href="#open-panel" />');

accordion
.find(
" > li."
+ defaults.activeClassLi
+ " > "
+ defaults.panel
+ ", > li."
+ defaults.lockedClass
+ " > "
+ defaults.panel
)
.show()
.addClass(defaults.activeClassPanel);

var active = accordion.find(
" > li."
+ defaults.activeClassLi
+ ", > li."
+ defaults.lockedClass
);

if (!defaults.canToggle && active.length < 1) {
accordion
.find(" > li")
.first()
.addClass(defaults.activeClassLi)
.find(" > " + defaults.panel)
.addClass(defaults.activeClassPanel)
.show();
}

accordion.delegate(".accordion-opener", "click", function(e) {
e.preventDefault();
e.stopImmediatePropagation();

var clicked = $(this),
clickedLi = clicked.closest("li"),
panel = clickedLi.find(">" + defaults.panel).first(),
open = accordion.find(
" > li:not(."
+ defaults.lockedClass
+ ") > "
+ defaults.panel
+ "."
+ defaults.activeClassPanel
);

if (!clickedLi.hasClass(defaults.lockedClass)) {
if (panel.is(":visible")) {
if (defaults.canToggle) {
panel.trigger("panel-close");
}
} else {
panel.trigger("panel-open", [clickedLi]);
if (!defaults.canOpenMultiple) {
open.trigger("panel-close");
}
}
}
});
});

return this;
};
})(jQuery);

Данный скрипт работает с версией jquery 1.4.2
Как мне обновить данный скрипт, чтобы он работал на версии 1.10, с которой работает движок 1.10.4?

Сам в этом не силен, поэтому прошу помощи

P.S. мое последнее сообщение на форуме)) (сообщений: 666)
#2 15 октября 2014 в 18:17
Специалисты по jquery, где же вы?))
#4 15 октября 2014 в 19:06
В настройках в пункте "Где показывать модуль?" пропала возможность выбирать раздел сайта и позиции.
Работают только галочки показывать и на всех страницах.
Версия v1.10.3
Я так понимаю, что конфликт Jquery
Помогите…
#5 15 октября 2014 в 19:27
Вячеслав Леонов, спасибо за наводку, оставлю на заметку как вариант. Но все же хотелось бы исправить данный скрипт под новую версию

Я не прошу за меня что то делать. Просто прошу людей разбирающихся в этом, сказать, может в данном скрипте используются какие-то устаревшие методы, которые необходимо заменить
#6 15 октября 2014 в 19:36
Rossoman, а что там вообще должно быть в верстке? У меня не получается воссоздать ту структуру, с которой работает этот скрипт. Я могу посмотреть на чем он спотыкается.
Ну а вообще, не пробовали поискать более свежую версию этого плагина? Или другой, схожий по функционалу, но работающий с последними версиями jQuery ветки 1.х?
Вячеслав Леонов, это самое последнее дело, подключать несколько версий фреймворков из-за несовместимости с такими мизерными плагинами. Уж лучше найти подходящий плагин под нужную версию, если переписать существующий нет возможности. А плагинов этих в интернетах как грязи 😊
#7 15 октября 2014 в 19:50
airy, буду очень признателен если подскажите в чем проблема. В ЛС скинул ссылку и разъяснения
#8 15 октября 2014 в 19:59

Вячеслав Леонов, это самое последнее дело, подключать несколько версий фреймворков из-за несовместимости с такими мизерными плагинами. Уж лучше найти подходящий плагин под нужную версию, если переписать существующий нет возможности. А плагинов этих в интернетах как грязи

airy

Иногда это не реально, при всем разнообразии scratchа вообще — согласен
#9 15 октября 2014 в 20:02
Вместо кучи разных версий jQuery достаточно подключить мигратор,
а в конкретно вашем случае файербаг от мозилы может вам указать на устаревшие методы.
#10 15 октября 2014 в 20:23
  1. $.browser
#11 15 октября 2014 в 20:30
В старых версиях, при вызове $.browser вы получаете объект, необходимо сделать проверку на IE и при выполнении анимации уже использовать необходимые значения, т.е. вытащить эту проверку из аргументов функции (вообще это не особо красивая реализация) и переписать без использования $.browser. Скрипт смотрел бегло, возможно еще что-то.
#12 15 октября 2014 в 20:40


мигратор,

Loadырь

Класс! Спасибо, пригодится и мне!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.