Mautzi: Sehr sehr seltsames Javascript Problem

also ich habe folgende Javascript funktion

function ole(arg) {
   alert (arg);
   text = document.getElementById(arg).firstChild.nodeValue;

if (text) {

alert (text);
   } else {
      alert ("kein Text eingegeben");
   }
}

dazu habe ich eine textarea mit einer id z.b. mytext

außerdem habe ich einen Button mit onClick='javascript:ole(mytext)'

wenn ich inhalt in meiner textarea habe zeigt er mir das richtig bei alert(text) an,

habe ich aber keinen Inhalt geht er nicht in meinen else abschnitt herein, warum nicht??

url: http://www.webgroove.de/mmeyer/cms/photos.php?id=28

  1. ey nicht die wichtigen ;) Bilder löschen

  2. also ich habe folgende Javascript funktion

    function ole(arg) {
       alert (arg);

    Was wird dir denn hier angezeigt?

    text = document.getElementById(arg).firstChild.nodeValue;

    Wenn du wirklich eine Textarea hast ist das mit Kanonen auf sPatzen geschossen, soll heißen, du komst wesentlich einfacher an dern Wert:

    document.forms[FromName].elements[ElementName].value;

    Darüber hinaus ist es immer sinnvoll auch zu testen, ob das passiert was du erwartest.

    sprich:

    if(!arg) return alert('Fehler kein Argument');
    var obj = document.getElementById(arg);
    if(obj) return alert('Fehler obj nicht gefunden');

    text = obj.firstChild.nodeValue;

    aber wie gesagt für Textareas nicht notwendig.

    dazu habe ich eine textarea mit einer id z.b. mytext

    außerdem habe ich einen Button mit onClick='javascript:ole(mytext)'

    Da stecken zwei Nachlässigkeiten drin.

    1. ist 'javascript:' hier ein überflüssiges Label, mach es weg (wo hast du das überhaupt her?)

    2.) was ist mytext?
    Ein normaler Browser hält mytext für eine nicht definierte Variabel und sollte einen entsprechenden Fehler anzeigen. Wie man Fehler findet steh hier http://glasgoogle.de

    Struppi.

    1. guck dir das mal bitte auf dem Link an den ich angegeben habe,

      das mit dem 'javascript:fds()' hab ich von Flash, da kenn ich mich sowieso besser aus ;)

      und die Textarea gehört bei mir nicht direkt zum formular, weil ich ein Fomular in einem Formular brauche, und mir dafür nur Javascript zur verfügung steht.

      mytext war nur ein beispiel, guck am besten mal den Link an

      1. guck dir das mal bitte auf dem Link an den ich angegeben habe,

        das mit dem 'javascript:fds()' hab ich von Flash, da kenn ich mich sowieso besser aus ;)

        Ja, gut aber 'javascript:' ist wie gesagt ein Label, dass nicht nötig ist und es gibt Browser die keine Label kennen und dort erzeugt diese Variante einfach einen Fehlöer.

        und die Textarea gehört bei mir nicht direkt zum formular, weil ich ein Fomular in einem Formular brauche, und mir dafür nur Javascript zur verfügung steht.

        Es gibt kein Formular in einem Formular, dann ist dein HTML Dokument falsch auf gebaut.

        Ja ich habe mir den Link angeguckt (schau mal in der FAQ nach weie man URL anklickbar macht) und sehe das du Strings übergibst. also nicht so wie du es hier beschrieben hast Objekte. Trotzdem ist das was ich gesagt habe richtig.

        Struppi.

        1. Ich weiß ja das es kein Formular im Formular gibt, deswegen möchte ich dieses mit Hilfe von Javascript simulieren im Prinzip funktioniert ja auch alles wie ich es haben will,

          ich gebe einen Text ein klicke auf ändern, Javascript zeigt mir mein Argument an, richtig.

          danach holt es sich die nodeValue und zeigt sie über alert an, auch richtig, das Problem ist lediglich das wenn ich nix inne Textarea reinschreibe, er nicht in meinen Else Teil springt.

          Später hab ich natürlich keine Alerts drinne, sondern dann wird der Text an eine Datenbank übergeben.

          Ich hoffe das war jetzt verständlich.

          Übrigens hab ich die URL auch klickbar in meinem ersten POST (oben) ;) in diesem auch nochma

          1. danach holt es sich die nodeValue und zeigt sie über alert an, auch richtig, das Problem ist lediglich das wenn ich nix inne Textarea reinschreibe, er nicht in meinen Else Teil springt.

            Was hast du denn an meinem Tipps nicht verstanden?
            Ich bekomm auf deiner Seite eine Fehlermeldung angezeigt und wenn du diese Tipps einfach mal zu Herzen nehmen könntest wären wir jetzt schon viel weiter.

            Weißte mir macht das immer wieder Freude. Jemand hat ein Problem oder Frage, ich schreibe ellenlanger Erklärungen um zu helfen, aber das wird schön ignoriert und die Frage einfach 20 mal wiederholt. Du bist nicht sehr kooperativ. Wenn du meine Hilfe nicht willst, sage es einfach.

            Struppi.

            1. Fehler lag daran das ich gerade rumgebastelt habe, ich danke dir ja für deine Erklärungen, werde ich auch ausprobieren, aber ich möchte wissen warum meins nicht funktioniert

              habe jetzt diese funktion

              function ole(arg) {
                 var text;
                 if (text = document.getElementById(arg).firstChild.nodeValue) {
                    alert (text);

              } else {
                    alert ("kein Text eingegeben");
                 }
              }

              die auch funktioniert wenn ich etwas in meine Textarea eingegeben habe, allerdings scheint er das script abzubrechen, wenn ich keinen Text eingebe, denn zum else kommt er nicht, ich möchte im Prinzip nur eins wissen, wenn ich

              if (text = document.getElementById(arg).firstChild.nodeValue)

              abfrage und es true ist macht er was er soll,

              aber wenn es false ist kommt er nicht zum else??????

              ich finde das sehr merkwürdig??

              1. ok habe jetzt

                forms("myform").elements(arg).value

                benutzt und es funktioniert, danke danke danke.

                bleibt für mich nur die Frage, warum er das Script bei

                document.getElementById(arg).firstChild.nodeValue

                abbricht wenn da nix drinne ist, aus welchem Grund??

                1. forms("myform").elements(arg).value

                  benutzt und es funktioniert, danke danke danke.

                  Das ist nicht ganz richtig, bitte lese doch mal die Sachen die ich dir zeige. Flash Skript und JS ist etwas anderes.

                  forms("myform").elements(arg).value

                  document.forms ist keine Funktion genausowenig wie elements.

                  document.forms["myform"].elements[arg].value

                  Struppi.

                  1. das ist mir klar, so siehts nur eingebaut in meine Funktion aus, arg ist ein argument was er einsetzt

                    1. das ist mir klar, so siehts nur eingebaut in meine Funktion aus, arg ist ein argument was er einsetzt

                      Trotzdem sind die Klammern falsch auch eingebaut in deiner Funktion.

                      Struppi.

              2. Fehler lag daran das ich gerade rumgebastelt habe, ich danke dir ja für deine Erklärungen, werde ich auch ausprobieren, aber ich möchte wissen warum meins nicht funktioniert

                Dass hab ich dir geschrieben, weil du einen Fehler erzeugst.

                function ole(arg) {
                   var text;
                   if (text = document.getElementById(arg).firstChild.nodeValue) {

                Wo überprüpfst du hier ob document.getElementById(arg) einen Wert hat? (wie ich schon in meinem ersten Posting schrieb)

                die auch funktioniert wenn ich etwas in meine Textarea eingegeben habe, allerdings scheint er das script abzubrechen, wenn ich keinen Text eingebe, denn zum else kommt er nicht, ich möchte im Prinzip nur eins wissen, wenn ich

                if (text = document.getElementById(arg).firstChild.nodeValue)

                abfrage und es true ist macht er was er soll,

                aber wenn es false ist kommt er nicht zum else??????

                ich finde das sehr merkwürdig??

                Nein, das ist nich merkwürdig, du erzeugst einen Fehler, danach läuft das Skript nicht weiter.

                Wie gesagt ich frage mich, warum du hier mit firstChild und nodeValue arbeitest, wie man Formularelemente abfragt steht hier http://selfhtml.teamone.de/javascript/objekte/elements.htm

                Struppi.

                1. so jetzt versteh ich das habe die funktion jetzt so

                  function ole(arg) {
                     var text;
                     text = document.getElementById(arg).value;
                     if (text != "") {
                        alert (text);

                  } else {
                        alert ("kein Text eingegeben");
                     }

                  }

                  Ich dachte nämlich das ich übers firstChild gehen muss, weil ich das machen muss wenn ich in FLASH ein XML einlese dann wär mein Inhalt
                  im FirstChild

                  also bei diesem XML file

                  <main>
                    <item1>hallo</item1>
                  </main>

                  würde ich in Flash so abfragen

                  myXML.firstChild.firstChild.firstChild.nodeValue

                  das muss man auch erstmal checken, das das in Javascript anders funktioniert

                  1. und danke nochmal für deine Hilfe, hoffe du verstehst jetzt meine Verwirrung

              3. Hi Mautzi,

                function ole(arg) {
                   var text;
                   if (text = document.getElementById(arg).firstChild.nodeValue) {
                      alert (text);

                } else {
                      alert ("kein Text eingegeben");
                   }
                }

                willst Du wissen ob die Zuweisung klappt oder ob der Text identisch mit dem document.getElementById(arg).firstChild.nodeValue ist?
                Du fragst ab ob die Zuweisung klappt.

                ciao
                romy

                1. Hallo Romy,

                  willst Du wissen ob die Zuweisung klappt oder ob der Text identisch mit dem document.getElementById(arg).firstChild.nodeValue ist?
                  Du fragst ab ob die Zuweisung klappt.

                  Nicht wirklich. Er weist der Variablen text den Wert von document.getElementById(arg).firstChild.nodeValue zu und fragt, ob text ungleich "", 0 bzw. false ist.

                  Grüße
                  Andreas

                  --
                  As Einstein once said during a Thanksgiving food fight, "It's all relatives."
                  1. hat sich alles erledigt

                    so sieht die fertige funktion aus

                    function ole(arg) {
                       var text;
                       text = document.getElementById(arg).value;
                       if (text != "") {
                          alert (text);

                    } else {
                          alert ("kein Text eingegeben");
                       }

                    }

  3. Hi Mautzi,

    if (text) {

    alert (text);
       } else {
          alert ("kein Text eingegeben");
       }
    }

    if(text) wird wohl das Problem sein. Wahrscheinlich wegen der Leerzeichen, die bei Textareas mitkommen, wenn ein Umbruch zwischen den tags steht.

    if(text.Length>0) wäre die bessere Alternative, allerdings nachdem Du text durch ein trim gejagt hast um die überflüssigen Leerzeichen oder Steuerzeichen wegzubekommen.

    ciao
    romy