Alex: focus() macht Probleme! HILFE!

Hallo,
ich habe mir eine Funktion erstellt, die das Feld automatisch wechselt sobald der maximale Länge erreicht ist.
Klappt ja auch soweit, bis auf die Fehlermeldung unter Firefox v3 & Firefox v2 mit FireBug.

  
function nextFieldOnFocus(feldId, nextFeldId) {  
  if(feldId.getAttribute('maxlength')==feldId.value.length) {  
     document.getElementById(nextFeldId).focus();  
  }  
}  

  
<input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(PLZ,'Ort');" value="">  

Fehlermeldung unter FireBug:

Erlaubnis zum Lesen der Eigenschaft XULElement.popupOpen wurde verweigert
document.getElementById(nextFeldId).focus();

Erlaubnis für das Setzen der Eigenschaft XULElement.selectedIndex wurde verweigert
document.getElementById(nextFeldId).focus();

Was kann ich da machen?
Es funktioniert zwar, aber diese Fehlermeldung ist unschön, möchte sie beseitigen.

  1. .. .onkeyup="nextFieldOnFocus(PLZ,'Ort');" ...

    Könnte es sein dass hier ein paar '' fehlen? Oder hast du eine Varibale namens PLZ irgendwo definiert?

    1. Könnte es sein dass hier ein paar '' fehlen? Oder hast du eine Varibale namens PLZ irgendwo definiert?

      Nein, ist schon richtig so.
      Habe dieses Script aus einer Zeitschrift.
      Der Bug ist bekannt, und sollte bei Firefox ab v3 bereits behoben sein.

      1. Hi,

        Könnte es sein dass hier ein paar '' fehlen? Oder hast du eine Varibale namens PLZ irgendwo definiert?

        Nein, ist schon richtig so.

        Nein, ist es nicht.
        (Aber auch, wenn du diesen Fehler behebst, ist der Umgang der Funktion mit diesem Parameter noch unsinnig. Wenn eine ID uebergeben wuerde, muesste die Funktion daraus erst mal das Element ermitteln, mittels getElementById(). Oder aber, wenn direkt die Referenz auf das Feld uebergeben werden sollte - dann waere der Parameter unsinnig benannt.)

        Habe dieses Script aus einer Zeitschrift.

        Dann verbrenne sie, und kaufe auf keinen Fall eine weitere Ausgabe.

        Der Bug ist bekannt, und sollte bei Firefox ab v3 bereits behoben sein.

        Der "Bug" liegt im Script, nicht im Browser.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Nein, ist es nicht.
          (Aber auch, wenn du diesen Fehler behebst, ist der Umgang der Funktion mit diesem Parameter noch unsinnig. Wenn eine ID uebergeben wuerde, muesste die Funktion daraus erst mal das Element ermitteln, mittels getElementById(). Oder aber, wenn direkt die Referenz auf das Feld uebergeben werden sollte - dann waere der Parameter unsinnig benannt.)

          Wieso Unsinnig?
          Kannst du das mal näher erläutern, was du daran unsinnig findest?

          Dann verbrenne sie, und kaufe auf keinen Fall eine weitere Ausgabe.

          Ne ne ne, aus "c't" glaube ich, eine namenhafte zeitschrift :)

          Der "Bug" liegt im Script, nicht im Browser.

          Ja das kann sein, ist aber auch ein Bug, habe den Link nicht mehr, ist aber auf Bugzilla zu lesen. Und SOLLTE ab v3 raus sein.

          Das Script funktioniert, alles wunderbar, nur diese Meldung nervt halt, kommt aber auch nicht immer ...

          Der Fehler ensteht beim "onfocus" setzten, nicht beim selectieren der ID.

  2. Mahlzeit Alex,

    function nextFieldOnFocus(feldId, nextFeldId) {
      if(feldId.getAttribute('maxlength')==feldId.value.length) {
         document.getElementById(nextFeldId).focus();
      }
    }

      
    Deine Funktion erwartet also ganz offenbar als ersten Parameter ein Elementobjekt, als zweiten Parameter dann einen String, der die ID eines Elements enthält ... korrekt?  
      
      
    
    > ~~~html
      
    
    > <input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(PLZ,'Ort');" value="">  
    > 
    
    

    Gesetzt den Fall, dass obige Vermutung zutrifft, sollte dann hier eine globale Variable existieren, die auf das aktuelle Elementobjekt verweist. Wenn dem nicht so ist, ist Dein Code fehlerhaft.

    Und: NEIN, das ist KEIN Bug im Firefox. Egal, wie oft Du das behauptest.

    Anmerkung: wieso benutzt Du in Deinem Eventhandler für den ersten Parameter des Funktionsaufrufs nicht einfach http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this? So hätte sich Dein Problem in Wohlgefallen aufgelöst ...

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Deine Funktion erwartet also ganz offenbar als ersten Parameter ein Elementobjekt, als zweiten Parameter dann einen String, der die ID eines Elements enthält ... korrekt?

      Jup!

        
      
      > > <input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(PLZ,'Ort');" value="">  
      
      

      Gesetzt den Fall, dass obige Vermutung zutrifft, sollte dann hier eine globale Variable existieren, die auf das aktuelle Elementobjekt verweist. Wenn dem nicht so ist, ist Dein Code fehlerhaft.

      Jein!

      Und: NEIN, das ist KEIN Bug im Firefox. Egal, wie oft Du das behauptest.

      Ich werde dir das Gegenteil beweisen.
      Ich persönlich war auf der Seite, habe selber nachgelesen, in der Zeitschrift stand es auch, der Code ist 1:1 aus der Zeitschrift übernommen worden.

      Anmerkung: wieso benutzt Du in Deinem Eventhandler für den ersten Parameter des Funktionsaufrufs nicht einfach http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this? So hätte sich Dein Problem in Wohlgefallen aufgelöst ...

      mit "this" gehts nicht. Habe ich auch schon ausprobiert.

      1. Mahlzeit Alex,

        <input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(PLZ,'Ort');" value="">

        
        > > Gesetzt den Fall, dass obige Vermutung zutrifft, sollte dann hier eine globale Variable existieren, die auf das aktuelle Elementobjekt verweist. Wenn dem nicht so ist, ist Dein Code fehlerhaft.  
        > Jein!  
          
        Doch. Wenn eine derartige globale Variable NICHT existiert - wie soll ein Browser dann darauf zugreifen können?  
          
          
        
        > > Und: NEIN, das ist KEIN Bug im Firefox. Egal, wie oft Du das behauptest.  
        > Ich werde dir das Gegenteil beweisen.  
          
        Dann beweise es.  
          
          
        
        > Ich persönlich war auf der Seite, habe selber nachgelesen, in der Zeitschrift stand es auch, der Code ist 1:1 aus der Zeitschrift übernommen worden.  
          
        Ja und? Nur weil in irgendeiner Zeitschrift irgendwas drinsteht, heißt das noch lange nicht, dass es richtig sein muss ...  
          
          
        
        > > Anmerkung: wieso benutzt Du in Deinem Eventhandler für den ersten Parameter des Funktionsaufrufs nicht einfach <http://de.selfhtml.org/javascript/sprache/objekte.htm#this@title=this>? So hätte sich Dein Problem in Wohlgefallen aufgelöst ...  
        > mit "this" gehts nicht. Habe ich auch schon ausprobiert.  
          
        "Geht nicht" [geht nicht](http://forum.de.selfhtml.org/hilfe/charta.htm#tipps-fuer-fragende). WAS GENAU hast du ausprobiert?  
          
          
        MfG,  
        EKKi  
        
        -- 
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        
        1. Hi,

          <input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(PLZ,'Ort');" value="">

          Gesetzt den Fall, dass obige Vermutung zutrifft, sollte dann hier eine globale Variable existieren, die auf das aktuelle Elementobjekt verweist. Wenn dem nicht so ist, ist Dein Code fehlerhaft.
          Jein!

          Doch. Wenn eine derartige globale Variable NICHT existiert - wie soll ein Browser dann darauf zugreifen können?

          Es "klappt" hier deshalb, weil das Inputfeld ein name="PLZ" hat.
          Daraus generieren die Browser einen entsprechenden Eintrag in der elements-Collection des Formulars, und da der Zugriff hier aus dem Formular heraus erfolgt, finden sie dieses dann auch.

          Aendert wenig daran, dass der Parameter damit bloedsinnig benannt ist.
          Und das es mit this natuerlich genauso funktionieren wuerde.

          MfG ChrisB

          --
          „This is the author's opinion, not necessarily that of Starbucks.“
          1. Mahlzeit ChrisB,

            Doch. Wenn eine derartige globale Variable NICHT existiert - wie soll ein Browser dann darauf zugreifen können?

            Es "klappt" hier deshalb, weil das Inputfeld ein name="PLZ" hat.

            ... und man sich darauf verlässt, dass der Browser implizit da schon die richtigen Objekte anlegen wird. So etwas finde ich extremst fahrlässig.

            Aendert wenig daran, dass der Parameter damit bloedsinnig benannt ist.
            Und das es mit this natuerlich genauso funktionieren wuerde.

            IMHO sogar besser.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
          2. Wie soll ich es denn machen?
            Das ist für mich die einfachste Variante.
            Wüsste nicht wie ich es "vereinfachen" bzw. den Fehler beheben könnte.

            Kannst du mir da einen Ansatz liefern, ich meine es ist ein 3-Zeiler, aber irgendwie komm ich nicht dahiner :(

            1. Mahlzeit Alex,

              Wie soll ich es denn machen?
              Das ist für mich die einfachste Variante.

              Ausgehend von Deinem Code:

                
              function nextFieldOnFocus(feld, nextFeldId) {  
                if (feld.value.length == feld.maxLength) {  
                  document.getElementById(nextFeldId).focus();  
                }  
              }
              

              <input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(this, 'Ort');" value="">

              MfG,
              EKKi

              --
              sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              1. function nextFieldOnFocus(feld, nextFeldId) {
                  if (feld.value.length == feld.maxLength) {
                    document.getElementById(nextFeldId).focus();
                  }
                }

                
                >   
                > `<input type="text" name="PLZ" id="PLZ" style="width:47px" maxlength="5" onkeyup="nextFieldOnFocus(this, 'Ort');" value="">`{:.language-html}  
                  
                Merci.
                
              2. EDIT:

                Das Problem ist leider damit nicht beseitigt.
                In unterschiedlichen Situationen melden FF immer noch Fehlermeldungen.

                Trotzdem Danke!

    2. Und: NEIN, das ist KEIN Bug im Firefox. Egal, wie oft Du das behauptest.

      Hatte zum Teil unrecht, dieses Problem tritt mit der Verbindung "onkeyup" auf.

      Klick

      Ich hoffe ich habe alles richtig gelesen... :)

      1. Mahlzeit Alex,

        Und: NEIN, das ist KEIN Bug im Firefox. Egal, wie oft Du das behauptest.
        Hatte zum Teil unrecht, dieses Problem tritt mit der Verbindung "onkeyup" auf.

        Klick

        Ich hoffe ich habe alles richtig gelesen... :)

        Es handelt sich bei dem von Dir beschriebenen Problem tatsächlich um einen Fehler im Firefox. Ich habe aber etwas komplett anderes an Deinem Code bemängelt. Lies mein Posting nochmal und behebe ggf. den Fehler.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|