conrad: javascript error

hallo zusammen,

ich habe folgendes form:

<html>

<form name="myname">

<input type="RADIO" checked name="email[]" value="mailto:email@email.de">ein name

<a href="javascript:document.myname.target='_email';document.myname.action=document.myname.email['0'].value;document.myname.submit()"><font color='red'><b>email schicken</b></font></a>

</html>

ich will also beim klick auf "eamil schicken" die email an die angeklickte email[] schicken.

das "document.myname.email[0].value" ist doch aber richtig, oder?

das error zeigt mir an, dass "document.myname.email.0" null oder kein object ist.

wo steckt aber der denkfehler?`

mfg

  1. Moin,

    <form name="myname">
    <input type="RADIO" checked name="email[]" value="mailto:email@email.de">ein name

    hast du in diesem Formular mehrere Felder mit name="email[]"? Falls nein, warum dann die Klammern, die ein Array andeuten wollen?

    <a href="javascript:document.myname.target='_email';document.myname.action=document.myname.email['0'].value;document.myname.submit()"><font color='red'><b>email schicken</b></font></a>

    das "document.myname.email[0].value" ist doch aber richtig, oder?

    Nein, zumal du im Code-Ausschnitt nicht "email[0]" stehen hast - aber über diese Spitzfindigkeiten sieht Javascript wegen der automatischen Typumwandlung gern hinweg (trotzdem: bitte auf den Unterschied zwischen Strings und numerischen Werten achten).

    das error zeigt mir an, dass "document.myname.email.0" null oder kein object ist.

    Genau, du hast nämlich gar kein Feld mit dem Namen "email", sondern eines (oder mehrere) mit dem Namen "email[]". Für Javascript sind die Klammern ganz normal Teil des Namens, weil er im HTML-Attribut so festgelegt ist. Dass aus Feldern, deren Name mit "[]" endet, ein Array erzeugt wird, ist eine Besonderheit von PHP bei der Verarbeitung der Formulardaten, aber in Javascript gibt es diesen Automatismus nicht.

    Um das so benamste Feld anzusprechen, muss du es in Javascript bei seinem vollen Namen nennen, hier also
     document.myname['email[]'].value
    wenn nur ein Element mit diesem Namen existiert, und
     document.myname['email[]'][n].value
    wenn mehrere existieren - wobei n in diesem Fall der Index ist, mit dem du die verschiedenen gleichnamigen Elemente ansprichst.

    So long,
     Martin

    --
    Die beste Informationsquelle sind Leute, die jemand anderem versprochen haben, nichts weiterzuerzählen.
      (alte Journalistenweisheit)
    1. hallo und danke schonmal:

      hier mein vollständiger code:

      <input checked type="RADIO" name="betreff" value="test1">test1<br>
      <input type="RADIO" name="betreff" value="test2">test2<br>
      <input type="RADIO" name="betreff" value="test3">test3<br>

      <a href="javascript:document.myname.target='_email';document.myname.action=document.myname.emailto.value +'
      ?Subject=mysubject
      &Body='+ document.myname['betreff[]'][i].value;document.myname.submit()"><font color='red'><b>email schicken</b></font></a>

      leider kann ich "i" nicht angeben, da ich nicht weiß, ob der user test1, test2, test3 auswählt.

      auch wenn ich es teste und test1 auswähle und "i" gegen "0" tausche, dann bekomme ich die meldung das es NULL oder kein objekt ist.

      wie kann ich es noch lösen?

      1. Hallo,

        <input checked type="RADIO" name="betreff" value="test1">test1<br>
        <input type="RADIO" name="betreff" value="test2">test2<br>
        <input type="RADIO" name="betreff" value="test3">test3<br>

        jetzt lässt du die Indexklammern beim Namen weg, ...

        <a href="javascript:document.myname.target='_email';document.myname.action=document.myname.emailto.value +'
        ?Subject=mysubject
        &Body='+ document.myname['betreff[]'][i].value;document.myname.submit()"><font color='red'><b>email schicken</b></font></a>

        ... schreibst sie aber beim Zugriff auf das Element wieder hin. Damit hast du den gleichen Fehler wie vorher, nur genau andersrum. ;-)

        leider kann ich "i" nicht angeben, da ich nicht weiß, ob der user test1, test2, test3 auswählt.

        Klar, du musst also erst mit einer Schleife (eine for-Schleife bietet sich an) über document.myname.betreff[] iterieren und die checked-Eigenschaft abfragen, um das momentan ausgewählte Element herauszufinden.

        auch wenn ich es teste und test1 auswähle und "i" gegen "0" tausche, dann bekomme ich die meldung das es NULL oder kein objekt ist.

        Klar, siehe oben. Du hast ja deinen Fehler komplett invertiert.

        So long,
         Martin

        --
        Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
        Aber warum bin ich ans Bett gefesselt?