Ankündigung

Einklappen
Keine Ankündigung bisher.

jQuery findet Element nicht

Einklappen

Neue Werbung 2019

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

  • jQuery findet Element nicht

    Hallo,
    ich hab grad ein ziemlich doofes Problem mit jQuery.
    Ich hab eine Liste von input die immer eine Fortlaufende id haben:
    email1, email2 usw.
    Nun will ich mit jQuery weitere Felder anhängen, wobei die id natürlich fortlaufen muss, aber es kann Lücken geben und diese müssen gefüllt werden.
    Beispiel: email1, email3. Dann muss erst das Element mit id: email2 erzeugt werden und hinten angehängt werden und dann nr. 4 usw...

    So mein JavascriptCode:
    Code:
    function neueMail(){
        var id = 1;
    
        do{
            id = id +1;
        }while($('#email' + id).length > 0);
    
    
        if (id < 10){
            id = '0' + id;
        }
    
        var name = $('#userid').val() + id;
    
        var content = '<p>' +
            '<label for="email' + id + '">Email : </label><input type="text" id="email' + id + '" name="email[]" /><br />' +
            '<label for="benutzer' + id + '">Benutzer : </label><input type="text" value="' + name + '" id="benutzer' + id + '" name="benutzer[]" /><br />' +
            '<label for="passwort' + id + '">Passwort : </label><input type="text" id="passwort' + id + '" name="passwort[]" /><br />';
            '</p>';
    
        $('p').last().after(content);
        }
    Der HTML-Code enthält am Anfang mindestens ein gleichaufgebauten <p>-Tag mit Inhalt:
    Code:
    <p>    <label for="email1">Email : </label><input value="..." id="email1" name="email[]" type="text">    <br>    <label for="benutzer1">Benutzer : </label><input value="..." id="benutzer1" name="benutzer[]" type="text">    <br>    <label for="passwort1">Passwort : </label><input value="..." id="passwort1" name="passwort[]" type="text">    <br></p>
    So nun hab ich durch PHP von den den p-Tags generiert und wenn ich dann mit jQuery das 6 (also id=6) hinzufügen will dann klappt das auch ganz toll...
    ABER danach wo eigentlich Nr. 7 kommen sollte kommt wieder ein mit id=6 ...

    Ich hab leider keinen Plan wo das Problem ist.
    Ich hab auch schon versucht die Elemente mit den Grundfunktionen von Javascript zu erstellen createElement usw, dann hab ich genau das gleiche Problem gehabt. Auch als ich die Elemente nicht mit dem jQuery-Selector sondern mit document.getElementById gesucht hab hat nichts geändert.

    Die Fehlerkonsole spuckt keine Fehler aus...

    Ich hoffe ihr könnt mir helfen.

    Grüße
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

  • #2
    Zitat von ByStones Beitrag anzeigen
    wobei die id natürlich fortlaufen muss, aber es kann Lücken geben und diese müssen gefüllt werden.
    Beispiel: email1, email3. Dann muss erst das Element mit id: email2 erzeugt werden und hinten angehängt werden und dann nr. 4 usw...
    Warum „müssen“ diese IDs angeblich fortlaufend sein?
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Warum müssen es überhaupt IDs sein. Für sowas gibt es name oder bei jQuery auch class.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Weil die Benutzer nicht alle gleich heißen können ?
        Jeder Nutzer hat eine eigene Nummer...

        nutzer01,nutzer02 und ab nutzer10 fällt die 0 vorne weg...

        Ob die Felder jetzt Id oder class haben is ansich ja egal, es ist ja nur als hilfe da um die nummern durchzulaufen...

        Ok, mal ganz anderer Ansatz:
        Ich speicher die Vergebenen Nummer in einem Array und durchlaufe dann das, dann muss ich keine IDs vergeben und bin nicht davon abhänig dass jQuery die Elemente findet...
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          Nein, das ist nicht egal. class kann nämlich mehrfach vorkommen und eine ID muss immer generiert werden.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Zitat von ByStones Beitrag anzeigen
            Weil die Benutzer nicht alle gleich heißen können ?
            Jeder Nutzer hat eine eigene Nummer...
            Das ist keine Antwort auf die Frage.


            Ob die Felder jetzt Id oder class haben is ansich ja egal,
            Sie brauchen vermutlich weder ID noch Class - zumindest nicht unbedingt.

            Es gibt in JavaScript durchaus vielfältige andere Möglichkeiten, die Referenz auf ein Element zu erhalten, als nur per ID. Wenn du noch keine kennst - dann erweitere dein Grundlagenwissen.
            Und jQuery bietet dir mit der Möglichkeit, einen CSS-artigen Selektor anzugeben, noch simplere Möglichkeiten.


            Wenn du es nicht alleine hinbekommst, und weitere Hilfe hier suchst - dann beschreibe bitte, was du letztendlich erreichen willst. (Viele Neulinge machen den Fehler, immer nur nach Lösungen auf dem Holzweg zu fragen, auf den sie sich bereits begeben haben; dabei liegt die [sinnvolle] Lösung oft darin, es anders zu machen.)


            es ist ja nur als hilfe da um die nummern durchzulaufen...
            Ebenso sicher, wie man in PHP sagen kann, dass du höchstvermutlich etwas ganz falsch machst, wenn du anfängst Variablenamen „durch zu nummerieren“, weil du bspw. keine Arrays kennst, kann man auch in Bezug auf HTML/DOM sagen, dass du etwas falsch machst, wenn du dich bemühst, „fortlaufend nummerierte“ IDs zu vergeben, nur weil du keine andere Möglichkeit zur Selektion bestimmter Elemente gefunden hast.
            [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

            Kommentar


            • #7
              Ok, ich wär dämlich auf das mit den Arrays hätte ich eigentlich gleich kommen können... *fett gegen Kopf hau*
              Naja ich habs jetzt nochmal mit den Arrays gemacht und siehe da es geht...

              Eindeutige IDs bauch ich aber immer noch wegen der <label> damit ich das for-Attribute setzten kann....

              Ich frag mich aber immer noch warum jQuery die Elemente nicht gefunden hat?

              Grüße

              Es gibt in JavaScript durchaus vielfältige andere Möglichkeiten, die Referenz auf ein Element zu erhalten, als nur per ID. Wenn du noch keine kennst - dann erweitere dein Grundlagenwissen.
              Und jQuery bietet dir mit der Möglichkeit, einen CSS-artigen Selektor anzugeben, noch simplere Möglichkeiten.
              Ja aber dadurch finde ich dann ja keine Lücken. Ich haub auch versucht alle inputs zu Durchlaufen, per regulärem Ausdruck deren Inhalt auszuwerten und dadurch die Nummer zu generieren... Da war wieder genau das gleiche Problem dass der die Elemente nicht gefunden hat die ich nachträglich erzeugt habe...

              Und genau das war auch das Problem und ich glaube nicht dass es mit einem anderen Selektor besser geklappt hätte, da er wie oben geschrieben die Elemente weder per document.getElementById noch über ein CSS-jQuery-Selektor.
              Signatur:
              PHP-Code:
              $s '0048656c6c6f20576f726c64';
              while(
              $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

              Kommentar


              • #8
                Zitat von ByStones Beitrag anzeigen
                Eindeutige IDs bauch ich aber immer noch wegen der <label> damit ich das for-Attribute setzten kann....
                Dazu braucht es aber keine fortlaufenden IDs mehr - wenn da „Lücken“ drin sind, ist das in Bezug darauf vollkommen egal.


                Und IDs braucht es auch nicht unbedingt, wenn man das Input- ins Label-Element hineinpackt. (Nur IE <= 6 hat damit ein Problem, dort setzt klicken auf das Label dann nicht mehr den Fokus auf das Feld bzw. ändert den checked-Status.)
                [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                Kommentar


                • #9
                  Zitat von ChrisB Beitrag anzeigen
                  Dazu braucht es aber keine fortlaufenden IDs mehr - wenn da „Lücken“ drin sind, ist das in Bezug darauf vollkommen egal.


                  Und IDs braucht es auch nicht unbedingt, wenn man das Input- ins Label-Element hineinpackt. (Nur IE <= 6 hat damit ein Problem, dort setzt klicken auf das Label dann nicht mehr den Fokus auf das Feld bzw. ändert den checked-Status.)
                  Ok dass man die IDs weglassen kann wenn das ganze ins label mit reinkommt wusste ich nicht.

                  Ja so gesehen braucht man die fortlaufenden IDs nichtmehr, aber da ich das mit den Labeln nicht wusste, dachte ich dass man die vergeben muss (!). Und dann wollte ich die halt als Hilfe nehmen um die Lücken zu finden...

                  Ok das mit den Lücken finden ist erledigt. Arrays FTW

                  Aber warum hat jQuery die Elemente nicht gefunden ???

                  Grüße
                  Signatur:
                  PHP-Code:
                  $s '0048656c6c6f20576f726c64';
                  while(
                  $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

                  Kommentar

                  Lädt...
                  X