Heinrich Krebs: document.getElementByNameTag länge...

Ich möchte dass alle Schaltflächen <input>-Tags einer Seite erst nach einer halben Sekunde anklickbar sind.

Dazu nutze ich:

for (var i = 0; i < <?PHP echo (2*($EintragsNum));?>; i++)  
{	  
	document.getElementsByTagName("input")[i].disabled = false;  
}

Wobei $EintragsNum die Anzahl der Einträge ist, von denen jeder zwei Schaltflächen hat. Andere <input>-Tags gibt es nicht auf der Seite.
Dennoch scheinen die <input>-Tags nicht durchgängig im getElementsByTagName("input") zu liegen, den obwohl die Anzahl stimmt, werden nicht alle frei gegeben.
Kann ich irgendwie die Gesamtlänge von getElementsByTagName ermitteln und diese dann für die Schleife eintragen ?

  1. Hallo,

    Ich möchte dass alle Schaltflächen <input>-Tags einer Seite erst nach einer halben Sekunde anklickbar sind.

    aufgrund deiner nachfolgenden Anmerkungen frage ich schon hier: Meinst du wirklich nur input-Elemente, oder allgemein Formularelemente?

    Dazu nutze ich:

    for (var i = 0; i < <?PHP echo (2*($EintragsNum));?>; i++)

    {
    document.getElementsByTagName("input")[i].disabled = false;
    }

      
    Das schließt nämlich textarea, button oder select nicht mit ein. Ist dir das bewusst?  
      
    
    > Kann ich irgendwie die Gesamtlänge von getElementsByTagName ermitteln und diese dann für die Schleife eintragen ?  
      
    Natürlich, Javascript-Arrays verfügen über eine length-Eigenschaft. Aber hilft dir das? Die Anzahl der Schleifendurchläufe legst du ja schon im PHP-Teil fest, und du sagst, die Anzahl stimmt.  
      
    So long,  
     Martin  
    
    -- 
    "Mutti, hier steht, das Theater sucht Statisten. Was sind Statisten?" - "Das sind Leute, die nur rumstehen und nichts zu sagen haben." - "So wie Papa?"  
    
    
    1. aufgrund deiner nachfolgenden Anmerkungen frage ich schon hier: Meinst du wirklich nur input-Elemente, oder allgemein Formularelemente?

      Ja, nur die.
      Es gibt auch auf der Seite keine anderen Elemente.

      Natürlich, Javascript-Arrays verfügen über eine length-Eigenschaft. Aber hilft dir das? Die Anzahl der Schleifendurchläufe legst du ja schon im PHP-Teil fest, und du sagst, die Anzahl stimmt.

      Stimmt sie, ich weiß, dass ich so viele Elemente habe. Ich kann sie ja auch auf der Seite die dann generiert wird, abzählen. ABER

      for (var i = 0; i < <?PHP echo (2*($EintragsNum));?>; i++)  
      {  
               document.getElementsByTagName("input")[i].disabled = false;  
      }
      

      schaltet nicht alle Elemente frei. Es hört auf, als ob einige Inputs eine getElementsByTagName("input")[i] mit i > $EintragsNum hätten. Was aber nicht sein sollte, da ich ja wie gesagt auch in Browser die Schaltflächen abzählen kann und die von PHP ermittelte Anzahl stimmt.

      Die Frage also ob eindocument.getElementsByTagName("input").length
      mit Aufschluss geben kann, was hier nicht stimmt.

      1. Mahlzeit Heinrich Krebs,

        Es hört auf, als ob einige Inputs eine getElementsByTagName("input")[i] mit i > $EintragsNum hätten.

        Das spricht eher dafür, dass Du außer Deinen Texteingabefeldern noch weitere Eingabeelemente vom Typ "input" hast (z.B. Radio- und Checkboxen, Buttons usw.).

        Spätestens jetzt wäre es angebracht, aussagekräftigen HTML-Quellcode zu zeigen. Oder erwartest Du von Deinen Lesern, dass sie weiterhin wie mit langen Stangen im Nebel herumstochern?

        Die Frage also ob eindocument.getElementsByTagName("input").length
        mit Aufschluss geben kann, was hier nicht stimmt.

        ?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Spätestens jetzt wäre es angebracht, aussagekräftigen HTML-Quellcode zu zeigen. Oder erwartest Du von Deinen Lesern, dass sie weiterhin wie mit langen Stangen im Nebel herumstochern?

          Nope. Sorry.

          Habe beim Rüberkopieren des Quellcodes dann durch Zufall den Fehler gefunden. Ein Tippfehler in einer If-Klausel des php-Teils hat dafür gesorgt, dass zusätzliche <input type="hidden"> am Ende des Dokumentes standen, die eigentlich gar nichts in der Ausgabe zu suchen hatten.

          Dennoch vielen dank für die Mühe.

      2. Hi,

        aufgrund deiner nachfolgenden Anmerkungen frage ich schon hier: Meinst du wirklich nur input-Elemente, oder allgemein Formularelemente?
        Ja, nur die.
        Es gibt auch auf der Seite keine anderen Elemente.

        okay, ich frag' ja nur - mir ist so ein Versehen nämlich auch schon passiert: Ich wollte eine CSS-Regel für alle Formularelemente, habe aber nicht genau darüber nachgedacht und sie dann versehentlich nur auf input-Elemente angewendet.

        Stimmt sie, ich weiß, dass ich so viele Elemente habe. Ich kann sie ja auch auf der Seite die dann generiert wird, abzählen. ABER

        for (var i = 0; i < <?PHP echo (2*($EintragsNum));?>; i++)

        {
                 document.getElementsByTagName("input")[i].disabled = false;
        }

        
        > schaltet nicht alle Elemente frei.  
          
        Ich würde, um der Sache auf die Schliche zu kommen, provisorisch mal anstatt der disabled-Eigenschaft irgendeine \*sichtbare\* Eigenschaft verändern (z.B. style.backgroundColor) und zusätzlich ein alert() in die Schleife setzen. Dann kann ich nämlich Schritt für Schritt verfolgen, ob wirklich die richtigen Elemente adressiert werden.  
          
        Ich habe nämlich das dumpfe Gefühl, dass du vielleicht noch das eine oder andere einzeln stehende input-Element oder gar ein ganzes Formular (ein Suchfeld vielleicht?) \*vor\* dem fraglichen Formular hast. Überhaupt: Warum wendest du getElementsByTagName eigentlich auf das ganze Dokument an, und nicht direkt auf das Formular?  
          
        
        > Die Frage also ob ein `document.getElementsByTagName("input").length`{:.language-javascript} mit Aufschluss geben kann, was hier nicht stimmt.  
          
        Kommt drauf an - wenn du wirklich noch andere input-Elemente irgendwo hast, auf die du im Moment nicht geachtet hast, müsste document.getElementsByTagName("input").length dich stutzig machen.  
          
        So long,  
         Martin  
        
        -- 
        Zivilisation bedeutet, dass die Eskimos warme Wohnungen bekommen und dann arbeiten müssen, damit sie sich einen Kühlschrank leisten können.  
        
        
  2. Kann ich irgendwie die Gesamtlänge von getElementsByTagName ermitteln und diese dann für die Schleife eintragen ?

    Obwohl dein Problem gelöst ist, ein kleiner Hinweis. Es wäre gar nicht aufgetreten, wenn du die Eigenschaft genutzt hättest, die dafür zu Verfügung steht.

      
    var inp = document.getElementsByTagName("input");  
    for (var i = 0; i < inp.length; i++)  
    {	  
     	inp[i].disabled = false;  
    }
    

    Struppi.