johny7: jQuery: Plugins für nachgeladene Elemente verfügbar machen

Moin allerseits,

ich habe heute wieder mal ein Problem in jQuery.
In meiner Anwendung werden verschiedene Inhalte per AJAX nachgeladen. Wie kann ich nun die Plugins für nachgeladene Inhalte verfügbar machen? Z.B. lade ich Formulare nach. Das jQuery form - Plugin soll auch für solche Formulare gelten.
Ich möchte die einzelnen java-script-Blöcke nicht in all den Unterdateien verteilen. Stattdessen möchte ich in der ladenden Datei zentral die Funktion für alle Formulare definieren und wenn ein Formular nachgeladen wird, soll es ebenfalls per AJAX abgeschickt werden können.

Hat jemand eine Idee?

Dasselbe wäre auch für sämtliche andere Plugins (z.B. jQuery uI datepicker etc.) interessant...

Grüße, JN

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de
  1. In meiner Anwendung werden verschiedene Inhalte per AJAX nachgeladen. Wie kann ich nun die Plugins für nachgeladene Inhalte verfügbar machen? Z.B. lade ich Formulare nach. Das jQuery form - Plugin soll auch für solche Formulare gelten.

    Wie du JavaScript nachträglich lädst und ausführst zeigt dir die Doku von jQuery im Abschnitt "Ajax" - "script" sollte das Stichwort sein.

    1. Moin allerseits,

      Wie du JavaScript nachträglich lädst und ausführst zeigt dir die Doku von jQuery im Abschnitt "Ajax" - "script" sollte das Stichwort sein.

      Meinst du .getScript() ?
      Damit kannst du anschließend Scripte ausführen.
      Ich will aber z.B: in meiner index.php sämtliche Einstellungen für die Plugins treffen und die sollen dann auch für nachgeladene Inhalte gelten. Geht das?

      Grüße, JN

      --
      ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
      http://www.johny7.de
      1. Ich will aber z.B: in meiner index.php sämtliche Einstellungen für die Plugins treffen und die sollen dann auch für nachgeladene Inhalte gelten. Geht das?

        Wenn du die Settings mit den geeigenten Mechanismsen setzt, stehen diese ohnein global als default zur Verfügung.

        für den UI-Datepicker sind das z.B. $.datepicker.regional[] für die Lokalisierung und $.datepicker.setDefaults() für die Defaulteinstellungen.

        1. Moin allerseits,

          Ich will aber z.B: in meiner index.php sämtliche Einstellungen für die Plugins treffen und die sollen dann auch für nachgeladene Inhalte gelten. Geht das?

          Wenn du die Settings mit den geeigenten Mechanismsen setzt, stehen diese ohnein global als default zur Verfügung.

          für den UI-Datepicker sind das z.B. $.datepicker.regional[] für die Lokalisierung und $.datepicker.setDefaults() für die Defaulteinstellungen.

          OK, aber wie weise ich nun den Datepicker einer Klasse zu?

            
          $(".datepicker").datepicker();  
          
          

          Damit wären alle aktuell vorhandenen Klassen aktiviert. Was passiert aber mit denen, die nachträglich dazu geladen werden? Mir bleibt nur die Möglichkeit, diese nach dem Laden erneut zu zu weisen.

          Grüße, JN

          --
          ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
          http://www.johny7.de
          1. OK, aber wie weise ich nun den Datepicker einer Klasse zu?

            Garnicht.

            $(".datepicker").datepicker();

            
            > Damit wären alle aktuell vorhandenen Klassen aktiviert.  
              
            Nein, damit hängst du an alle Element mit der Klasse .datepicker einen Datepicker.  
              
            
            > Was passiert aber mit denen, die nachträglich dazu geladen werden?  
              
            Was soll mit denen großartig passieren?  
              
            
            > Mir bleibt nur die Möglichkeit, diese nach dem Laden erneut zu zu weisen.  
              
            Ja - wo ist das Problem, wenn du das in der complete-Funktion deines Ajax-Dinges einfach ausführst?  
              
            So wie ich das sehe willst du garnicht irgendwelche Scripte nachträglich laden sondern lediglich bereits vorhandene Nutzen.
            
            1. Moin allerseits,

              Mir bleibt nur die Möglichkeit, diese nach dem Laden erneut zu zu weisen.

              Ja - wo ist das Problem, wenn du das in der complete-Funktion deines Ajax-Dinges einfach ausführst?

              So wie ich das sehe willst du garnicht irgendwelche Scripte nachträglich laden sondern lediglich bereits vorhandene Nutzen.

              Ja klar. Aber ich dachte, ich hätte eine Möglichkeit, einmal an alle existierenden und zukünftigen Objekte einer Klasse so einen Datepicker dran zu hängen. Aber offensichtlich muss ich beim Nachladen eines Inhalts die Datepicker wieder manuell anhängen...

              Grüße, JN

              --
              ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
              http://www.johny7.de
              1. Moin allerseits,

                Mal ein einfaches Beispiel:

                  
                $(".cmxform input:not(:submit), .cmxform textarea").addClass("ui-state-default ui-state-active");  
                
                

                Ich will alle Formularelemente in .cmxform wie oben angegeben formatieren.
                Wenn das Dokument geladen ist, werden die Klassen zugewiesen. Sie sollen aber auch zukünftig erzeugten Elementen derselben Klasse zugewiesen werden. Quasi wie live() oder delegate() bei Events. Geht das oder ist das überhaupt nicht möglich?

                Grüße, JN

                --
                ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
                http://www.johny7.de
                1. Wenn das Dokument geladen ist, werden die Klassen zugewiesen. Sie sollen aber auch zukünftig erzeugten Elementen derselben Klasse zugewiesen werden. Quasi wie live() oder delegate() bei Events.

                  Schon mal mit live() und dem load-Event gespielt?

                  $('.foo').live(  
                    'load',  
                    function() {  
                      $(this).datepicker();  
                    }  
                  );
                  

                  Habe ich noch nie versucht, aus dem Bauch herraus würde ich es aber so machen - ggf. funzt das.

                  1. Moin allerseits,

                    Schon mal mit live() und dem load-Event gespielt?

                    $('.foo').live(

                    'load',
                      function() {
                        $(this).datepicker();
                      }
                    );

                    
                    >   
                    > Habe ich noch nie versucht, aus dem Bauch herraus würde ich es aber so machen - ggf. funzt das.  
                    
                    Bei mir hat das irgendwie nicht funktioniert...  
                      
                      
                    Grüße, JN
                    
                    -- 
                    ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)  
                    http://www.johny7.de
                    
                    1. Bei mir hat das irgendwie nicht funktioniert...

                      War auch nur eine Idee - ggf. hilft ein stöbern in der Doku.