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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • ö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 |


    Comment


    • #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

      Comment


      • #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 |


        Comment


        • #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

          Comment


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

            Comment


            • #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

              Comment


              • #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
                Last edited by E.T.; 04-08-2008, 21:27.
                Download ET-Chat v3.x.x

                Comment


                • #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.

                  Comment


                  • #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

                    Comment

                    Working...
                    X