öffentliche Methoden eines Objektes über einen Event-Handler aufrufen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • öffentliche Methoden eines Objektes über einen Event-Handler aufrufen

    dank dieses threads bin ich auf ein problem gestossen, was ein wenig merkwürdig ist. folgendes beispiel wirft eine Fehlermeldung a la "this.cancelEditingNumber is not a function" aus:
    PHP-Code:
    <div id="blubb">
        
    </
    div>
    <
    script type="text/javascript">
        function 
    HandyEditor() 
        {
          
    this.editNumber = function() 
          {        
            
    // create cancel button
            
    cancelLink document.createElement('a');
            
    cancelLink.href '#';
            
    cancelLink.innerHTML 'Abbrechen';        
            
    document.getElementById('blubb').appendChild (cancelLink);
            
    cancelLink.onclick = function() 
            {
              
    this.cancelEditingNumber();
            }
          }      
          
    this.cancelEditingNumber = function () 
          {    
            
    alert ('bla');    
          }
        }
        var 
    handyEditor = new HandyEditor();
        
    handyEditor.editNumber();
      </
    script
    während folgendes einwandfrei funktioniert.
    PHP-Code:
    <div id="blubb">
        
      </
    div>
      <
    script type="text/javascript">
        function 
    HandyEditor() 
        {
          
    this.editNumber = function() 
          {        
            
    // create cancel button
            
    cancelLink document.createElement('a');
            
    cancelLink.href '#';
            
    cancelLink.innerHTML 'Abbrechen';        
            
    document.getElementById('blubb').appendChild (cancelLink);
            
    this.cancelEditingNumber();
          }      
          
    this.cancelEditingNumber = function () 
          {    
            
    alert ('bla');    
          }
        }
        var 
    handyEditor = new HandyEditor();
        
    handyEditor.editNumber();
      </
    script
    kann mir mal jemand erklären, warum ich hier bei dem onclick-handler
    PHP-Code:
    cancelLink.onclick = function() 
    {
      
    this.cancelEditingNumber();

    besagte meldung erhalte, während das einfache
    PHP-Code:
    this.cancelEditingNumber(); 
    sauber läuft?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    weil die fkt noch nicht definiert wurde evtl? *schussinsblaue*
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      *schussinsblaue*
      wohl eher ein schuss in den ofen
      PHP-Code:
      this.cancelEditingNumber = function () 
      {    
        
      alert ('bla');    

      andere reihenfolge bringt auch nichts
      PHP-Code:
      this.cancelEditingNumber = function () 
      this.editNumber = function() 
      ich hasse javascript!!!

      peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Original geschrieben von Kropff
        wohl eher ein schuss in den ofen
        hab' ich doch fast vermutet... *gg*

        wenn du diese beiden zeilen mal verdrehst?

        Code:
                document.getElementById('blubb').appendChild (cancelLink);
                cancelLink.onclick = function()
        also erst das onclick definieren und dann ins DOM kleben?
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          wenn du diese beiden zeilen mal verdrehst?
          nee, garnichts. das selbe ergebnis, eine fehlermeldung.

          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Deine anonyme Funktion ist an kein Objekt gebunden. Schau dir in dem Zusammenhang mal die Methode apply und Prototype's bind an.

            Kommentar


            • #7
              Original geschrieben von PHP-Desaster
              Deine anonyme Funktion ist an kein Objekt gebunden. Schau dir in dem Zusammenhang mal die Methode apply und Prototype's bind an.
              apply hatten wir schon. siehe auch link zu obigem thread. und die kokosnuss wollen wir mal ohne prototype knacken.

              was genau meinst du mit "ist an kein Objekt gebunden". sorry, ist schon spät und meine konzentrationsfähigkeit geht langsam aber sicher den bach herunter.

              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                so ist das richtig!

                PHP-Code:
                <script type="text/javascript">
                    function 
                HandyEditor() 
                    {
                    
                    var 
                self this;
                    
                      
                this.editNumber = function() 
                      {        
                        
                // create cancel button
                        
                cancelLink document.createElement('a');
                        
                cancelLink.href '#';
                        
                cancelLink.innerHTML 'Abbrechen';        
                        
                document.getElementById('blubb').appendChild (cancelLink);
                        
                cancelLink.onclick = function() 
                        {
                          
                self.cancelEditingNumber();
                        }
                      }      
                      
                this.cancelEditingNumber = function () 
                      {    
                        
                alert ('bla');    
                      }
                    }
                    
                window.onload = function() {
                    var 
                handyEditor = new HandyEditor();
                    
                handyEditor.editNumber();
                }
                  </
                script>
                  
                <
                div id="blubb">
                    
                </
                div
                Erklärung dazu hier:
                http://de.wikipedia.org/wiki/JavaScr..._Eigenschaften
                Zuletzt geändert von E.T.; 04.08.2008, 22:27.
                Download ET-Chat v3.x.x

                Kommentar


                • #9
                  PHP-Code:
                  var self this;
                  // ...
                  cancelLink.onclick = function() {
                   
                  self.cancelEditingNumber();

                  So geht's auch. Prototype macht in etwa folgendes:
                  PHP-Code:
                  function bindmethodself ) {
                      return( function() {
                          
                  method.applyself );
                      } );

                  Das ist equivalent zu self.method(), allerdings kannst du apply als zweiten Parameter ein Array von Funktionsparametern übergeben, ähnlich call_user_func_array.

                  Kommentar


                  • #10
                    na geht doch. danke für die hinweise. da habe ich heute abend was zu lesen.

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar

                    Lädt...
                    X