+ Antworten
Ergebnis 1 bis 9 von 9

Thema: jQuery und motools

  1. #1
    Neu an Board
    Registriert seit
    29.05.2008
    Beiträge
    89
    Bedankte sich
    6
    1 Danksagung in 1 Beitrag

    Standard jQuery und motools

    hallo,

    ich habe schon viel über google und auch hier über die SuFu darüber gefunden aber ich krieg es in meinem Fall einfach nicht hin jQuery und motools parallel zum laufen zu bringen.
    Ich habe ein plugin (tabber) welches motools nutzt, zusätzlich habe ich nun noch folgenden Code hinzugefügt:

    unter <jdoc:include type="head" />
    HTML-Code:
    	<script type="text/javascript" src="http://www.google.com/jsapi"></script>
    	<script type="text/javascript" src="Pfad zu meinem Script"></script>
    Inhalt des Scripts:

    Code:
    google.load("jquery", "1.3.1");
    google.setOnLoadCallback(function()
    {
        $(".mainlevel").hover(function() {
         $(this).stop().animate({ paddingLeft: '10px', fontSize:"18px" }, 400);  
        }, function() {
      $(this).stop().animate({ paddingLeft: 0, fontSize:"14px" }, 400);  
        });
        
        $(".sublevel").hover(function() {
         $(this).stop().animate({ paddingLeft: '20px', fontSize:"18px" }, 400);  
        }, function() {
      $(this).stop().animate({ paddingLeft: '10px', fontSize:"12px" }, 400);  
        });
    });
    Wenn ich dies so hinzufüge funktioniert zwar dieses Script aber das Tabber-Plugin nicht mehr.
    Ich denke die Lösung ist der noConflict-Mode. Ich habe diesen schon in unzähligen Variationen probiert jedoch kriege ich es nicht zum laufen.
    Habe auch schon 3 verschiedene jQuery-Plugins getestet aber alle sind kein bisschen dokumentiert und ich weiss nicht so recht wie ich diese für mein Script anwenden kann.

    Hat jemand einen Tipp?

  2. #2
    War schon öfter hier
    Registriert seit
    25.02.2010
    Ort
    Saarland
    Beiträge
    119
    Bedankte sich
    1
    Erhielt 30 Danksagungen
    in 29 Beiträgen

    Standard

    Hat jemand einen Tipp?
    Fraglich, ob es mehr als ein Tipp ist: aus der Erinnerung weiss ich dass 1. glaube ich im noConflict-Mode vor alle Anweisungen für jQuery ein "jQuery" statt einem "$" geschrieben werden sollte und 2. dass ich manchmal Scripte nur zum laufen gebracht habe wenn ich zwar die jQuery- und gegebenenfalls Plugin-Dateien im Header, die eigentlichen einzelnen Funktionsaufrufe allerdings am Ende der Seite untergebracht hab (was man ja eigentlich nicht machen sollte, deshalb versuche ich in der Regel die Mischung aus jQuery und Mootools zu vermeiden).

  3. #3
    Neu an Board
    Registriert seit
    29.05.2008
    Beiträge
    89
    Bedankte sich
    6
    1 Danksagung in 1 Beitrag

    Standard

    Richtig, als ich den noConflict-Mode getestet hab habe ich alle $ durch jQuery ersetzt.
    Ich habe gelesen das der noConflict-Code unmittelbar nach dem laden von jQuery erfolgen muss...!
    Oder hat jemand Erfahrung mit einem jQuery-Plugin ? Ich weiss nicht so recht wo ich da meinen Code einbinde.

  4. #4
    OpenSource Nutzer Avatar von blackice2999
    Registriert seit
    18.05.2006
    Ort
    Berlin
    Alter
    32
    Beiträge
    3.639
    Bedankte sich
    112
    Erhielt 935 Danksagungen
    in 711 Beiträgen

    Standard

    Hi,

    man sollte es vermeiden alle $ in jQuery umzuschreiben es wird auf jedenfall zu Problemen mit Plugins kommen. Es ist im Grunde genommen ganz einfach (ich gehe jetzt nicht darauf ein wie man ein Javascript einbindet... das ist html basis wissen).

    1.) jQuery laden (egal ob lokal oder von google)
    2.) direkt nach dem Laden einfach einmal jQuery.noConflict(); ausführen.
    3.) Scripte welche für jQuery sind "Kapseln"!

    Code:
    (function($) {
      // hier kommt nun alles rein was für jQuery gedacht ist...
      // ein umschreiben von $ in jQuery ist nun nicht mehr notwendig...
    })(jQuery);
    Thread gelöst ? => Anleitung
    Wichtige Themen => Joomla FAQ | Flottes Sicherheitsliste
    Einfach nur so => Geiz ist doch geil oder?
    *dies ist ein Joomla Forum - Kein css / html Anfänger Forum...*

  5. #5
    Neu an Board
    Registriert seit
    29.05.2008
    Beiträge
    89
    Bedankte sich
    6
    1 Danksagung in 1 Beitrag

    Standard

    das habe ich auch schon probiert und zwar so:

    Code:
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
    google.load("jquery", "1.3.1");
    $.noConflict();
    google.setOnLoadCallback(function()
    {  
    // ITEMS IN THE MAIN MENU
    jQuery(".mainlevel").hover(function() {
    jQuery(this).stop().animate({ paddingLeft: '10px', fontSize:"18px" }, 400);  
    }, function() {
    jQuery(this).stop().animate({ paddingLeft: 0, fontSize:"14px" }, 400);  
    });
    
    jQuery(".sublevel").hover(function() {
    jQuery(this).stop().animate({ paddingLeft: '20px', fontSize:"18px" }, 400);  
    }, function() {
    jQuery(this).stop().animate({ paddingLeft: '10px', fontSize:"12px" }, 400);  
    });
    });
    </script>
    dann erhalte ich die Meldung $.noConflict is not a function, probiere ich jQuery.noConflict dann kommt jQuery is not defined .

  6. #6
    Neu an Board
    Registriert seit
    29.05.2008
    Beiträge
    89
    Bedankte sich
    6
    1 Danksagung in 1 Beitrag

    Standard

    Mir ist aufgefallen das ich jQuery nicht unmittelbar nach mootools einbinde.
    Aber dies muss unmittelbar danach passieren, oder!?
    Nun stellt sich mir die Frage an welcher Stelle ich welche Datei editieren muss um jQuery und mein Script direkt nach mootools einzubinden.
    Der header mit den Scripten wird über <jdoc:include type="head" /> zusammengebastelt ich bin noch nicht so richtig dahinter gestiegen wo was herkommt...

  7. #7
    Neu an Board
    Registriert seit
    29.05.2008
    Beiträge
    89
    Bedankte sich
    6
    1 Danksagung in 1 Beitrag

    Standard

    Nach etwas rumprobieren bin ich zu ein paar neuen Erkenntnissen gelangt:

    Siehe auch hier Joomla Header modifizieren - Script einbinden

    Ich habe nun schonmal den noConflict-Mode zum laufen gebracht mit folgenden Code:
    Code:
       if (typeof jQueryLoading == "undefined" || !jQueryLoading)
       {
          jQueryLoading = true;
          google.load("jquery", "1.3.1");
    
          google.setOnLoadCallback(function()
          {
             jQuery.noConflict();
     
             [MEIN CODE]
    
    	});
    }
    Jedoch habe ich nun folgende Probleme:

    Lade ich erst mootools und danach jquery, dann geht mein jquery script aber nicht meine plugins welche mootools nutzen. Außerdem sehe ich im firebug gleich fehler meldungen von mootools funktionen (is not a function...).


    Lade ich erst jquery + mein jquery script und danach mootools dann erscheint im firebug zunächst keine Fehlermeldung und mein script ist ordentlich geladen und das mootools plugin ist auch initial richtig geladen, klicke ich dieses jedoch dann an kommt die Meldung $ is not a function.

    So langsam zweifel ich daran, ob es überhaupt einen Weg gibt beide frameworks simultan fehlerfrei zum laufen zu bringen.


    @blackice2999
    3. Scripte welche für jQuery sind "Kapseln"!
    Code:
    (function($) {
      // hier kommt nun alles rein was für jQuery gedacht ist...
      // ein umschreiben von $ in jQuery ist nun nicht mehr notwendig...
    })(jQuery);
    Diese Variante klingt interessant, jedoch weiss grad nicht so recht wie ich den Beispiel-Code einbinden soll. Könntest du mir noch ein etwas konkreteres Beispiel hierfür geben? Vielen Dank!

    [EDIT]
    @blackice2999
    Wenn ich das richtig verstehe meinst du es so:
    HTML-Code:
     <script src="https://www.google.com/jsapi?key=[meinKey]" type="text/javascript"></script>  
    <script type="text/javascript">
    	  google.load("jquery", "1.3.1");
          google.setOnLoadCallback(function()
          {
             jQuery.noConflict();
      });
      </script>  
      <script type="text/javascript" src="http://meineseite.de/mein_jquery_script.js"></script>
      <script type="text/javascript" src="/media/system/js/mootools.js"></script>
     <script type="text/javascript" src="/media/system/js/mootools_scripte.js"></script>
    Inhalt meines jQuery Scripts:
    Code:
    (function($) {
    
    google.load("jquery", "1.3.1");
    google.setOnLoadCallback(function()
    {   
    
    [Mein Code]
    
    });
    })(jQuery);
    Mit diesem Code wird die Seite richtig und ohne Fehler geladen! Mein jQuery Script funktioniert auch! Das Plugin welches motools nutzt wird auch initial richtig aufgebaut aber wenn man in dieses klickt erscheint die Meldung "$ is not a function".

    Vorrausgesetzt ich habe die von Dir gemeinte Syntax richtig interpretiert?
    Geändert von el3ment (08.02.2011 um 17:53 Uhr)

  8. #8
    Neu an Board
    Registriert seit
    12.07.2008
    Ort
    Wien
    Beiträge
    15
    Bedankte sich
    1
    Erhielt 5 Danksagungen
    in 5 Beiträgen

    Standard

    Kannst es auch mit jQuery Includer probieren, ist ein Gratis Plugin von mir, das lädt jQuery IMMER vor (und nicht fälschlicherweise nach) MooTools und ruft gleich ->noConflict() auf. Ausserdem lädt es jQuery mit far-future Headers und gzip komprimiert. jQuery Includer.

  9. #9
    Kommt häufiger vorbei Avatar von felfert
    Registriert seit
    13.02.2008
    Ort
    Ludwigsburg
    Alter
    54
    Beiträge
    330
    Bedankte sich
    4
    Erhielt 161 Danksagungen
    in 111 Beiträgen

    Standard

    Also google.setOnLoadCallback triggert erst beim document onLoad event und der kommt viel zu spät für den Aufruf von jquery.noConflict().
    Für den Aufruf einer Funktion direkt nach dem laden der jquery gibts in der google.load() doku die optionen, in denen man einen callback angeben kann.
    Also versuch stattdessen mal:
    Code:
    function setJqueryNoConflict() {jquery.noConflict();}
    google.load('jquery','1.3.1',{callback: setJqueryNoConflict});
    Un am Besten setzt Du mal im firebug mal breakpoints auf den Aufruf von noConflict und auf die 1. Zeile der mootools, damit Du sehen kannst was zuerst kommt. Der noconflict Aufruf muss auf jeden Fall vorher kommen damit er Wirkung hat.
    Watch this: AllVideos Reloaded

+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein