Mootools library vs Drupal jQuery

Paal képe

Üdv,

A Weblabor blogmarkjai közt akadtam rá egy js-menüre:
http://devthought.com/cssjavascript-true-power-fancy-menu

A problémám az, hogy moo függvénytárat használ, és amint betöltődik a Drupal 5.1 alapértelmezett jquery.js-e, nem működik a menü (és persze az összes jquery-s dolog is meghal).
Anélkül tökéletes (és fordítva is). Van valami megoldás arra, hogy együtt működhessen a kettő?

Köszi, Pali

Fórum: 
pp képe

a menü script azon része, ami a lap onload eseményére rakja rá a függvényt hibás, mert lecsréli, nem ráfűzi! (tehát minden mást kicsinál;))

itt egy szép megoldás, ha már van rajta függvény hogyan lehet hozzáfűzni, tehát nem lecserélni.

http://drupal.org/node/37548

(most rohanok el, ezért nincs időm megnézni és nem tudok ennél pontosabb leírást adni, de remélem ez is elég;))

pp

0
0
Paal képe

Kipróbáltam, de lehet, hogy teljesen hülyeséget. Js-ben totál fű vagyok (legalábbis ilyen szinten).
A jQuery oldalán is van valami leírás, hogyan tud más függvénytárral együtt működni (Using jQuery with Other Libraries) de nem lettem okosabb :(

Ha majd kirohantad magad, esetleg ránéznél, mit is kell(ene) csinálnom?

Thx, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Illyés Edit képe

1. Hozz létre egy addloadevent.js nevű fájlt a következő tartalommal:

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}

2. A zizismenü JS fájljának a végére írd be ezt:

function startSlideList() {
new SlideList($E('ul', 'fancymenu'), {transition: Fx.Transitions.backOut, duration: 700, onClick: function(ev, item) { ev.stop(); }});
 }
 
addLoadEvent(startSlideList);

Ha nem működik, akkor belekavarodtam itt a sok zárójelbe :)

Ajánlott irodalom:

Jeremy Keith: DOM Scripting: Web Design with JavaScript and the Document Object Model

Most jött ki a folytatása:

Jeremy Keith: Bulletproof Ajax

0
0
pp képe

Vagy az addLoadEvent függvény nem kell, és a zizismenü js utolsó sora helyett a következőt lehet írni:

if (Drupal.jsEnabled) {
  $(document).ready(startSlideList);
}
0
0
Paal képe

Kivettem az addloadevent.js-t. A menu.js-t módosítottam:

Ezt:

.
.
.
SlideList.implement(new Options);


Erre:

.
.
.
if (Drupal.jsEnabled) {
  $(document).ready(startSlideList);
}


De így sem a jQuery-s sem a moo-s cucc nem megy.

Hiba: this.events[type].keys has no properties
Forrásfájl: http://localhost/themes/garland/menu/mootools.js
Sor: 2
 
Hiba: startSlideList is not defined
Forrásfájl: http://localhost/themes/garland/menu/menu.js
Sor: 48
 
Hiba: this.events[type].keys has no properties
Forrásfájl: http://localhost/themes/garland/menu/mootools.js
Sor: 2
 
Hiba: $(menu + " li.expanded:not(.activemenu-processed)").each is not a function
Forrásfájl: http://localhost/sites/all/modules/jstools/activemenu/activemenu.js
Sor: 8

A js-ek sorrendje:
jquery.js
drupal.js
jstools/*.js

mootools.js
menu.js
main.js

Köszi, Pali

Üdv, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Paal képe

Elvileg jó és működik amit írtál, nagyon köszönöm!

Csak az volt a szívás, hogy nem mind1 a js-ek sorrendje. Most így működik:

<script type="text/javascript" src="/menu/addloadevent.js"></script>
<script type="text/javascript" src="/misc/jquery.js"></script>
<script type="text/javascript" src="/menu/mootools.js"></script>
<script type="text/javascript" src="/menu/menu.js"></script>
<script type="text/javascript" src="/menu/main.js"></script>

A menu.js végére került az amit másodjára írtál.

Viszont így a jQuery-s dolgok nem működnek:

Hiba: this.events[type].keys has no properties
Forrásfájl: http://localhost/themes/garland/menu/mootools.js
Sor: 2
 
Hiba: this.events[type].keys has no properties
Forrásfájl: http://localhost/themes/garland/menu/mootools.js
Sor: 2
 
Hiba: $(menu + " li.expanded:not(.activemenu-processed)").each is not a function
Forrásfájl: http://localhost/sites/all/modules/jstools/activemenu/activemenu.js
Sor: 8


Ha megcserélem a két függvénytár sorrendjét, akkor a másik funkciói működnek (mindig az, amelyiknek a függvénytára később szerepel az oldal forrásában).

5let?

Köszi, Pali

0
0

--
Palócz Paal Pál, a drupal.hu admin csoportjának tagja
Ajánlott olvasmány: Eric Steven Raymond - Hogyan kérdezzünk okosan

Illyés Edit képe

Az általad korábban belinkelt cikkből:

That said, there is one caveat: By default, jQuery uses "$" as a shortcut for "jQuery"

A hibajelzésed pedig azt írja, hogy az activemenu.js 8. sorában $().each is not a function.

Próbáld meg a cikkben leírt megoldással semlegesíteni a jQuery-t.

0
0
ninja képe

nálam nem akad össze.
ez van a head-ben:

<script type="text/javascript" src="/js/moo/mootools.js"></script>
<script type="text/javascript" src="/js/moo/site.js"></script>
<script type="text/javascript" src="/js/niftyCorners/niftyLayout.js"></script>
<script type="text/javascript" src="/js/niftyCorners/niftycube.js"></script>
<script type="text/javascript">
window.onload=function(){
Nifty("div#main");
}
</script>
<script type="text/javascript" src="/misc/jquery.js"></script>
<script type="text/javascript" src="/misc/drupal.js"></script>
<script type="text/javascript" src="/misc/autocomplete.js"></script>
<script type="text/javascript" src="/misc/collapse.js"></script>
<script type="text/javascript" src="/misc/textarea.js"></script>
0
0