Achot: Wert per jQuery abfragen

Hallo,

ich habe ein Feld

<select name="rechnungsadresse[1][id]" id="rechnungsadresse[1][id]>

und habe dazu folgenden jQuery Code

<?php for ($i = 1; $i <= $anzahl; $i++) { ?> var updateSelect = function () { $("#rechnungs_daten[<?php echo $i;?>][id]").load("inc/auslesen-rechnungsadresse.php", {rechnungsadresse: $('#rechnungsadresse[<?php echo $i;?>][id]').val()}); }; $("#rechnungsadresse[<?php echo $i;?>][id]").change(updateSelect); <?php } ?>

Es tut sich leider nichts. Auch wird mir kein Fehler ausgegeben. Könnt ihr mir sagen, wo der Fehler ist?

  1. Hallo,

    Könnt ihr mir sagen, wo der Fehler ist?

    In deinem Konzept. Kannst du erstmal ohne Code beschreiben was du erreichen möchtest?

    Gruß
    Kalk

    1. Hallo,

      ich habe ein bzw. mehrere Dropdown-Felder wo ich eine Adresse auswählen kann. Diese kennzeichne ich über

      name="adresse[<?php echo $i;?>][id]"

      Wenn eine Adresse ausgewählt wurde, soll im Feld

      <div id="rechnungs_daten[<?php echo $i;?>]"></div>

      die dazugehörige Adresse ausgegeben werden.

      1. Hallo,

        dein Ansatz, in einer Schleife für jeden Datensatz eine Funktion anzulegen ist jedenfalls Quatsch. Du benötigst eine Funktion, der du die Datensatznummer übergibst und die dann den entsprechenden Datensatz zurückliefert.

        Gruß
        Kalk

  2. Leg einen Container um die Eingabefelder und registriere das Change-Event dort. Es blubbert von select dahin hoch.

    Deiner Handler-Funktion gibst Du einen Parameter namens event. Darin findest Du das Objekt, mit dem jQuery Dich über die Einzelheiten des Events informiert. Das select, das sich geändert hat, bekommst Du per event.target.

    Dein Code funktioniert deswegen nicht, weil [] in einer ID zwar erlaubt ist, von jQuery aber als Attributselektor interpretiert wird. Wenn Du mit jQuery arbeiten willst, lass diese Zeichen aus IDs weg (im name ist das was anderes, da brauchst Du die eckigen Klammern damit PHP dir ein Array unter _GET bzw _POST bereitstellt). Nimm als ID z.B. rechnungsadresse_1 oder rechnungsadresse_1, aber mit $("# rechnungsadresse[1]") fragst Du jQuery nach einem Element mit id='rechnungsadresse', das ein Attribut namens '1' hat.

    Rolf

    1. Hallo Rolf,

      Dein Code funktioniert deswegen nicht, weil [] in einer ID zwar erlaubt ist, von jQuery aber als Attributselektor interpretiert wird. Wenn Du mit jQuery arbeiten willst, lass diese Zeichen aus IDs weg […]

      Kann man nicht auch alternativ an jQuery vorbei mit document.getElementByID hantieren?

      Gruß
      Julius

      -- Der Berliner ist der Pfannkuchen des Westens
      1. Natürlich kann man das. Damit gibt man dann aber die knappe jQuery-Syntax auf, und man vermischt jQuery und direkten DOM Zugriff. Wenn man mit jQuery erstmal anfängt, sollte man es auch konsequent nutzen.

        Und es gibt ja auch Stimmen, die vorschlagen, man sollte generell querySelector statt getElementById verwenden, um ein einheitliches API zu haben. Oder war's nur eine Stimme, die aber laut? Weiß grad nicht mehr... ;-)

        Rolf

        Nachtrag: Man kann auch escapen, hier ist die Spec.

        Das komplizierte ist nur, dass man in JS doppelt escapen muss, also z.B.

        $("#rechnungsadresse\\[1\\]\\[id\\]").load(...)

        weil zunächst mal Javascript das \ als Escape interpretiert. Und hier im Forum muss ich dann vierfach escapen... ohje.

        1. Hallo Rolf,

          Natürlich kann man das. Damit gibt man dann aber die knappe jQuery-Syntax auf, und man vermischt jQuery und direkten DOM Zugriff. Wenn man mit jQuery erstmal anfängt, sollte man es auch konsequent nutzen.

          Konsistenz, ist ja logisch.

          Und es gibt ja auch Stimmen, die vorschlagen, man sollte generell querySelector statt getElementById verwenden, um ein einheitliches API zu haben. Oder war's nur eine Stimme, die aber laut? Weiß grad nicht mehr... ;-)

          Ich habs mitbekommen, das war irgendwo in dem Monster-Thread zu den JavaScript-Tutorials im Wiki...

          Außer dem Verlust Konsistenz (keine Selektoren im CSS-Stil) hat man aber wohl keine wirklichen Nachteile, wenn man es nicht macht.

          Nachtrag: Man kann auch escapen, hier ist die Spec.

          Das komplizierte ist nur, dass man in JS doppelt escapen muss, also z.B.

          $("#rechnungsadresse\\[1\\]\\[id\\]").load(...)

          Autsch.

          weil zunächst mal Javascript das \ als Escape interpretiert. Und hier im Forum muss ich dann vierfach escapen... ohje.

          Autsch. Autsch.

          Gruß
          Julius

          -- Der Berliner ist der Pfannkuchen des Westens
          1. Autsch.

            Autsch. Autsch.

            Sorry. *pflaster reich*

            Rolf

            1. Hallo Rolf,

              fällt mir gerade erst ein; ein inline-Codeblock erspart dir das Escapen: also $("#rechnungsadresse\\[1\\]\\[id\\]").load(...) statt $("#rechnungsadresse\[1\]\[id\]").load(...)

              Gruß
              Julius

              -- Der Berliner ist der Pfannkuchen des Westens