+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: eigene Komponente und jQuery... jQuery findet funktion nicht?

  1. #1
    Neu an Board
    Registriert seit
    21.01.2012
    Beiträge
    2
    Bedankte sich
    2
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard eigene Komponente und jQuery... jQuery findet funktion nicht?

    Hallo,

    ich bin gerade dabei eine eigene Komponente für Joomla zu schreiben.
    Ich frage Daten aus einer Datenbank ab und gebe sie in verschiedenen divs und class tags wieder.

    Nun möchte ich aber noch mit jQuery weitere Funktionen hinzufügen.
    Um jQuery zu integrieren habe ich folgendes gemacht:

    In der index.php meines templates habe ich das hinzugefügt:
    PHP-Code:
    <?php defined'_JEXEC' ) or die( 'Restricted access' ); 
    $document = &JFactory::getDocument();
    //von mir hinzugefügt
    $document->addScript('media/system/js/jquery.js' );
    $document->addCustomTag'<script type="text/javascript">jQuery.noConflict();</script>' );
    ?>
    Nun sollte ja jQuery auf jeder Seite die das Template benutzt jQuery geladen werden.
    Das klappt auch, habe es mit Firebug überprüft.

    in meiner .php Datei der Komponente habe ich nun folgenden Code:
    Code:
    jQuery(document).ready(function() {
      function hideBox(){
    	jQuery(".box").hide();
      }
    });
    Ich habe das $ gegen jQuery getauscht, da ich gelesen habe dass es Probleme geben kann da MooTools auch das $ verwendet.
    Wenn ich die Funktion direkt danach aufrufe, klappt noch alles wunderbar:
    Code:
    jQuery(document).ready(function() {
      function hideBox(){
    	jQuery(".box").hide();
      }
    
    hideBox();
    });
    Wenn ich aber dann im Code der Komponente zb. einem Link einen Click Handler zuweisen möchte findet er die Funktion nicht:
    Code:
    <a href="javascript:hideBox()">hide Box<a/>
    Fehler:
    Code:
    Uncaught ReferenceError: hideBox is not defined
    (anonymous function)
    Ich verstehe nicht wieso die Funktion anonym sein soll, ich habe sie doch oben definiert?
    Allerdings muss ich dazu sagen dass das meine erste Komponente ist.

    Gibt es da Besonderheiten bei der Verwendung von jQuery in Joomla?
    Ich bin für jede Hilfe dankbar!

    Grüße,
    Kodak

  2. #2
    Verbringt hier viel Zeit
    Registriert seit
    29.11.2005
    Ort
    Berlin
    Beiträge
    962
    Bedankte sich
    8
    Erhielt 200 Danksagungen
    in 196 Beiträgen

    Standard

    Die Zuweisung über href ist veraltetes Javascript und wenn das funktionieren soll, dann müsstest du schon die Funktion über JQuery adressieren, allerdings ist das überflüssig, denn du hängst besser einfach einen Handler mit JQuery oder Mootools für den click-Event ein, dann sollte sowieso alles reibungslos laufen.
    Mein "Kunde" möchte mit Joomla zum Mond fliegen.

    Bin Anfänger... geht das irgendwie?

  3. #3
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Und da wundert sich noch manch einer, warum es so viele schlecht programmierte Komponenten für Joomla! gibt... *andenkopffass*

  4. Erhielt Danksagungen von:


  5. #4
    Gehört zum Inventar Avatar von jacxx
    Registriert seit
    07.03.2005
    Ort
    horsehead nebula
    Beiträge
    9.277
    Bedankte sich
    394
    Erhielt 2.050 Danksagungen
    in 1.939 Beiträgen

    Standard

    Mootools..

    myElement.hide(); //same as $(id).setStyle('display', 'none');
    Geändert von jacxx (23.01.2012 um 12:38 Uhr)
    Wer Joomla nachmacht oder verfälscht, oder nachgemachte oder verfälschte sich verschafft und in Verkehr bringt, wird mit Typo3 nicht unter zwei Jahren bestraft.
    Joomla Forum
    Joomla braucht Dich!

  6. #5
    Neu an Board
    Registriert seit
    19.05.2011
    Beiträge
    10
    Bedankte sich
    1
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard Probier es mal so

    Hallo,
    deine Funktion hideBox kannst Du aus dem document.ready entfernen, dann sollte es funktionieren.

    Zudem solltest Du Dein Event-Handler umschreiben.

    Dein Html:
    PHP-Code:
    <a href="#" class="hideLink">hide it</a>
    <
    div id="box">das ist meine box</a
    Dein JavaScript:
    PHP-Code:
    jQuery(document).ready(function() {
        $(
    '.hideLink').on('click',hideBox);
    });

    function 
    hideBox(){
        
    jQuery(".box").hide();

    Ich habe Dir hier ein Fiddle zusammengestellt auf die Schnelle. http://jsfiddle.net/8ArsS/1/

    Ein wichtiger Aspekt noch. Du solltest JavaScript nicht dazu nutzen, nach dem fertigen Laden (document.ready) Elemente darzustellen. Das führt zum FUBC (flash of un-behaviored content). Bedeutet, deine Box wäre sichtbar im Ladevorgang der Seite und bei am Ende des Ladevorganges würde die Box verschwinden, könnte bei der Darstellung zu einem Sprung führen. Die Lösung ist in deinem Beispiel recht einfach: definiere die Eigenschaft Deiner Box per CSS, und ändere Sie dann zur Laufzeit per JavaScript.

    Und noch ein Performance Tip. Wenn du mehr als nur hide() benutzten möchtest, wirst Du wahrscheinlich auf die Funktion css() stossen, das ist allerdings recht unperformant. Benutzte statt dessen lieber addClass() und removeClass().

    Vorsicht, der "on" Befehl in meinem Beispiel gibt es erst seit jQuery1.7. Vorher wurde / wird "bind" genutzt.

    PS: Vielleicht sollte man ordentlich helfen statt *andenkopffass*

  7. Erhielt Danksagungen von:


  8. #6
    Wohnt hier Avatar von Joomla-Hilfe
    Registriert seit
    12.08.2010
    Beiträge
    3.668
    Bedankte sich
    78
    Erhielt 1.094 Danksagungen
    in 874 Beiträgen

    Standard

    Zitat Zitat von abstractizm Beitrag anzeigen
    Ein wichtiger Aspekt noch. Du solltest JavaScript nicht dazu nutzen, nach dem fertigen Laden (document.ready) Elemente darzustellen.
    Doch, genau so sollte man JS einsetzen, wenn jeder andere Weg dazu führt, daß ohne JS Teile des Inhalts nicht angezeigt werden können.

    Das führt zum FUBC (flash of un-behaviored content). Bedeutet, deine Box wäre sichtbar im Ladevorgang der Seite und bei am Ende des Ladevorganges würde die Box verschwinden, könnte bei der Darstellung zu einem Sprung führen. Die Lösung ist in deinem Beispiel recht einfach: definiere die Eigenschaft Deiner Box per CSS, und ändere Sie dann zur Laufzeit per JavaScript.
    Das ist keine Lösung, sondern das Problem. Und ein völlig unnötiges noch dazu.
    Danke?

    Keine Macht den Facebutts!
    "Dinner for one ist jeden Tag" oder "Und täglich grüßt das Murmeltier"

  9. #7
    Neu an Board
    Registriert seit
    19.05.2011
    Beiträge
    10
    Bedankte sich
    1
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard Surfen ohne Javascript?

    Wer surft denn noch ohne JavaScript?
    http://www.webhits.de/deutsch/index.shtml?webstats.html

    Da Webseiten so gestaltet werden sollten, das schon zu Ladezeiten der User sich orientieren kann, und in dem genannten Fall wieder verschwinden können, spricht für MEIN EMPFINDEN eher als schlechtes UX. Aber da hat wohl dann doch jeder eine andere Meinung.

    Nimmt man es in Kauf, das es "springt" oder nicht, das sollte dann dem Entwickler selber überlassen.

  10. #8
    Wohnt hier Avatar von Joomla-Hilfe
    Registriert seit
    12.08.2010
    Beiträge
    3.668
    Bedankte sich
    78
    Erhielt 1.094 Danksagungen
    in 874 Beiträgen

    Standard

    Zitat Zitat von abstractizm Beitrag anzeigen
    Nimmt man es in Kauf, das es "springt" oder nicht, das sollte dann dem Entwickler selber überlassen.
    Richtig, und dem Besucher bleibt es überlassen, ob er den Entwickler für unfähig erklärt, weil er nicht alle Inhalte erreichen kann. Gut, daß das Web mittlerweile so groß ist, daß man so gut wie alle Informationen auch woanders finden kann.
    Danke?

    Keine Macht den Facebutts!
    "Dinner for one ist jeden Tag" oder "Und täglich grüßt das Murmeltier"

  11. #9
    Neu an Board
    Registriert seit
    19.05.2011
    Beiträge
    10
    Bedankte sich
    1
    Erhielt 2 Danksagungen
    in 2 Beiträgen

    Standard

    Das aktivieren von JavaScript kann man zum Surfen im Internet schon voraussetzen. Das entnimmt man ja auch aus der Statistik 100% (von 10300 Usern).

  12. #10
    Wohnt hier Avatar von Joomla-Hilfe
    Registriert seit
    12.08.2010
    Beiträge
    3.668
    Bedankte sich
    78
    Erhielt 1.094 Danksagungen
    in 874 Beiträgen

    Standard

    Zitat Zitat von abstractizm Beitrag anzeigen
    Das aktivieren von JavaScript kann man zum Surfen im Internet schon voraussetzen. Das entnimmt man ja auch aus der Statistik 100% (von 10300 Usern).
    Die Statistik kann nur falsch sein, denn ich allein kenne persönlich 5 Vielsurfer, die grundsätzlich mit aktivem Noscript surfen. Dazu kommen noch zwei Blinde, die gezwungen sind, Screenreader zu benutzen. Die werden nicht nur so schon genug benachteiligt, sondern auch noch völlig unnötig von dummen Webentwicklern.

    Mit Javascript kann man alles Mögliche anstellen, nur eins nicht: Es voraussetzen für die Darstellung der Inhalte einer Website.

    Bei Ämtern und Behörden und zunehmend auch bei größeren Firmen bekommst du mit deiner Einstellung kein Bein auf den Boden, und das ist auch gut so[tm].
    Danke?

    Keine Macht den Facebutts!
    "Dinner for one ist jeden Tag" oder "Und täglich grüßt das Murmeltier"

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

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