jQuery és prototype összeakad
Sziasztok!
Kaptam most egy weboldalt, hogy szerkesztgessem át, van benne minden finomság, a jquery és a prototype is meg van hívva. Viszont gyönyörűen összeakad a kettő.
Annyit sikerült kigugliznom, hogy ha a $ jelet pl. jQuery-re cserélem, akkor szépen fog futni együtt. Ez a kis egyszerű scriptecskénél működött is, viszont itt egy másik, ami nekem már magas (t.i. nem nagyon értek a javascripthez sajnos).
Lenne itt egy bátor úriember, aki ebben tudna segíteni egy js-hez béna lánykának ezt orvosolni, hogy mit is kellene az alábbi scriptben átírni, hogy ne akadjon össze a prototype-pal?
Előre is köszi!
■ Kaptam most egy weboldalt, hogy szerkesztgessem át, van benne minden finomság, a jquery és a prototype is meg van hívva. Viszont gyönyörűen összeakad a kettő.
Annyit sikerült kigugliznom, hogy ha a $ jelet pl. jQuery-re cserélem, akkor szépen fog futni együtt. Ez a kis egyszerű scriptecskénél működött is, viszont itt egy másik, ami nekem már magas (t.i. nem nagyon értek a javascripthez sajnos).
Lenne itt egy bátor úriember, aki ebben tudna segíteni egy js-hez béna lánykának ezt orvosolni, hogy mit is kellene az alábbi scriptben átírni, hogy ne akadjon össze a prototype-pal?
Előre is köszi!
$slideshow = {
context: false,
tabs: false,
timeout: 7000, // time before next slide appears (in ms)
slideSpeed: 1000, // time it takes to slide in each slide (in ms)
tabSpeed: 1000, // time it takes to slide in each slide (in ms) when clicking through tabs
fx: 'fade', // the slide effect to use
init: function() {
// set the context to help speed up selectors/improve performance
this.context = $('#slideshow');
// set tabs to current hard coded navigation items
this.tabs = $('ul.slides-nav li', this.context);
// remove hard coded navigation items from DOM
// because they aren't hooked up to $ cycle
this.tabs.remove();
// prepare slideshow and $ cycle tabs
this.prepareSlideshow();
},
prepareSlideshow: function() {
// initialise the $ cycle plugin -
// for information on the options set below go to:
// http://malsup.com/$/cycle/options.html
$('div.slides > ul', $slideshow.context).cycle({
fx: $slideshow.fx,
timeout: $slideshow.timeout,
speed: $slideshow.slideSpeed,
fastOnEvent: $slideshow.tabSpeed,
pager: $('ul.slides-nav', $slideshow.context),
pagerAnchorBuilder: $slideshow.prepareTabs,
before: $slideshow.activateTab,
pauseOnPagerHover: true,
pause: true
});
},
prepareTabs: function(i, slide) {
// return markup from hardcoded tabs for use as $ cycle tabs
// (attaches necessary $ cycle events to tabs)
return $slideshow.tabs.eq(i);
},
activateTab: function(currentSlide, nextSlide) {
// get the active tab
var activeTab = $('a[href="#' + nextSlide.id + '"]', $slideshow.context);
// if there is an active tab
if(activeTab.length) {
// remove active styling from all other tabs
$slideshow.tabs.removeClass('on');
// add active styling to active button
activeTab.parent().addClass('on');
}
}
};
$(function() {
// add a 'js' class to the body
$('body').addClass('js');
// initialise the slideshow when the DOM is ready
$slideshow.init();
});
context: false,
tabs: false,
timeout: 7000, // time before next slide appears (in ms)
slideSpeed: 1000, // time it takes to slide in each slide (in ms)
tabSpeed: 1000, // time it takes to slide in each slide (in ms) when clicking through tabs
fx: 'fade', // the slide effect to use
init: function() {
// set the context to help speed up selectors/improve performance
this.context = $('#slideshow');
// set tabs to current hard coded navigation items
this.tabs = $('ul.slides-nav li', this.context);
// remove hard coded navigation items from DOM
// because they aren't hooked up to $ cycle
this.tabs.remove();
// prepare slideshow and $ cycle tabs
this.prepareSlideshow();
},
prepareSlideshow: function() {
// initialise the $ cycle plugin -
// for information on the options set below go to:
// http://malsup.com/$/cycle/options.html
$('div.slides > ul', $slideshow.context).cycle({
fx: $slideshow.fx,
timeout: $slideshow.timeout,
speed: $slideshow.slideSpeed,
fastOnEvent: $slideshow.tabSpeed,
pager: $('ul.slides-nav', $slideshow.context),
pagerAnchorBuilder: $slideshow.prepareTabs,
before: $slideshow.activateTab,
pauseOnPagerHover: true,
pause: true
});
},
prepareTabs: function(i, slide) {
// return markup from hardcoded tabs for use as $ cycle tabs
// (attaches necessary $ cycle events to tabs)
return $slideshow.tabs.eq(i);
},
activateTab: function(currentSlide, nextSlide) {
// get the active tab
var activeTab = $('a[href="#' + nextSlide.id + '"]', $slideshow.context);
// if there is an active tab
if(activeTab.length) {
// remove active styling from all other tabs
$slideshow.tabs.removeClass('on');
// add active styling to active button
activeTab.parent().addClass('on');
}
}
};
$(function() {
// add a 'js' class to the body
$('body').addClass('js');
// initialise the slideshow when the DOM is ready
$slideshow.init();
});
jQuery.noConflict();
Talán a noConflict(); metódus segíteni fog.
Egy bővebb leírást itt találsz a megvalósításhoz (jQuery Cookbook 69.oldaltól):
http://oreilly.com/catalog/9780596159788/preview
Pont benne van a preview-ban :)
Üdv.: Nu7ec
Apró módosítások
Nutec-nek is igaza van, de a megoldás elég egyszerűnek látszik:
1. Rögtön a jQuery betöltése után egy <script> blokkban mondd azt, hogy: jQuery.noConflict();
2. Az idézett szkriptben (és minden másikban is, ami jQuery-t használ), cseréld le módszeresen a $( karaktersorozatot jQuery( -re.
További információt itt is találsz: http://docs.jquery.com/Using_jQuery_with_Other_Libraries
Üdv: Norbi
Óvatosan a $ jelekkel!
De ebben a kódban a "$slideshow" csupán egy változó név, amiben így a dollárjel felesleges is. Valószínűleg ezt a részt egy php-ban járatosabb ember írta.
Tehát itt is érdemes kivenni a dollárjelet, és a változót talán valami egyedibb névvel ellátni, de ekkor fontos MINDENHOL ezt megtenni a kódban.
Javascript változónevek
Kevlar