rap: if-Anweisung funktioniert nicht

Hallo, ich habe zum Test folgende HTML-Datei geschrieben:

  
<html><head><title>Test</title>  
<script type="text/javascript">  
function Auswahl() {  
var a = document.Form.model.value;  
var b = document.Form.Feld.value;  
if ((a=="a")&&(b=="CLJ2600N")) {  
document.writeln("Richtig");  
} else {  
document.writeln("Falsch");  
}  
  
//document.writeln(a+b);  
}  
</script>  
  
</head><body>  
<form name="Form">  
Angabe A:  
<input type="text" name="Feld">  
<br>  
Modell:  
<select name="model" size="1">  
      <option>LJ2015</option>  
      <option>LJP1505N</option>  
      <option>bizhub131f</option>  
      <option>LJ2015</option>  
      <option>CLJ2600N</option>  
</select>  
<br>  
<input type="button" value="OK" onclick="javascript:Auswahl()">  
</form>  
</body></html>  
  

Das Problem ist, dass immer "Falsch" ausgegeben wird, auch wenn ich in das Textfeld den Buchstaben a schreibe und beim Selectelement "CLJ2600N" auswähle. Welchen Fehler habe ich bei der If-Abfrage?

  1. Hi,

    Das Problem ist, dass immer "Falsch" ausgegeben wird, auch wenn ich in das Textfeld den Buchstaben a schreibe und beim Selectelement "CLJ2600N" auswähle. Welchen Fehler habe ich bei der If-Abfrage?

    Du gehst irrtümlich davon aus, <select>-Objekte hätten zwangsläufig eine value-Eigenschaft. Dem ist nicht so, sie haben selektierte <option>-Unterobjekte.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Du gehst irrtümlich davon aus, <select>-Objekte hätten zwangsläufig eine value-Eigenschaft. Dem ist nicht so

      Doch, dem ist so und das funktioniert in diesem Fall auch problemlos. Ein Unterschied kommt zum Tragen, wenn der interne Wert von der Beschriftung abweicht (z.B. <option value="intern">extern</a>). Wenn kein value-Attribut angegeben wird, ist die Beschriftung automatisch der interne Wert.

      Mathias

      1. Hi,

        Du gehst irrtümlich davon aus, <select>-Objekte hätten zwangsläufig eine value-Eigenschaft. Dem ist nicht so
        Doch, dem ist so

        stimmt, meine Behauptung ist unvollständig.

        und das funktioniert in diesem Fall auch problemlos.

        Tut es nicht. In dem gezeigten Beispiel enthält die Eigenschaft nicht zwangsläufig den gewünschten Wert.

        Wenn kein value-Attribut angegeben wird, ist die Beschriftung automatisch der interne Wert.

        Hm, und ich war davon überzeugt, Du kennst mehr als nur einen Browser.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hi,

        Du gehst irrtümlich davon aus, <select>-Objekte hätten zwangsläufig eine value-Eigenschaft. Dem ist nicht so

        Doch, dem ist so und das funktioniert in diesem Fall auch problemlos.

        Das SELFHTML-Beispiel http://de.selfhtml.org/html/formulare/anzeige/select.htm liefert mir im IE bei
        javascript:alert(document.forms[0].elements[0].value)
        in der Adresszeile nichts, auch wenn ich eine Option ausgewählt habe.

        Ein Unterschied kommt zum Tragen, wenn der interne Wert von der Beschriftung abweicht (z.B. <option value="intern">extern</a>). Wenn kein value-Attribut angegeben wird, ist die Beschriftung automatisch der interne Wert.

        Wenn gar kein value angegeben wurde (wie im vorliegenden Beispiel, und auch im Code des OP) liefert der IE (bis Version 7 einschliesslich zumindest) auch dann kein value, wenn man über options[select.selectedIndex].value zugreifen möchte.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Danke für diese konkrete und hilfreiche Ergänzung. Nett, dass jemand seine Erkenntnisse teilt, anstatt nur vage Andeutungen zu machen...

          Ich war von den Standards ausgegangen. Dass die vergleichsweise umständliche Praxis nötig ist, weil der IE hier nicht DOM-konform ist (übrigens IE 8 auch nicht), war mir nicht geläufig - es wird nirgendwo ausdrücklich erwähnt. Die Variante mit selectedIndex existiert wohl schon länger (JavaScript 1.0), während der value erst in DOM 1 HTML spezifiziert wurde.

          Mathias

          1. Hi,

            Ich war von den Standards ausgegangen.

            Weisst du doch - beim IE immer gefährlich ;-)

            Dass die vergleichsweise umständliche Praxis nötig ist, weil der IE hier nicht DOM-konform ist (übrigens IE 8 auch nicht), war mir nicht geläufig - es wird nirgendwo ausdrücklich erwähnt. Die Variante mit selectedIndex existiert wohl schon länger (JavaScript 1.0), während der value erst in DOM 1 HTML spezifiziert wurde.

            select.value funktioniert auch im IE - wenn die Options denn explizite values haben.

            Die Stelle, wo der IE den Standard missachtet, ist die von dir schon genannte - dass, wenn für Option kein value angegeben wurde, dieses implizit mit dem Textinhalt der Option zu befüllen ist.
            Allerdings zeigt er dieses Verhalten auch nur bezüglich JavaScript - weder select.value noch option[...].value liefert dann einen Wert. Schickt du das Formular hingegen ab - dann übermittelt auch der IE den Textinhalt der Option als Parameterwert.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Hallo,

    abgesehen von dem, was Cheatah bereits geschrieben hat, hätte ich noch etwas anzumerken:

    Das Problem ist, dass immer "Falsch" ausgegeben wird, auch wenn ich in das Textfeld den Buchstaben a schreibe und beim Selectelement "CLJ2600N" auswähle. Welchen Fehler habe ich bei der If-Abfrage?

    var a = document.Form.model.value;

    den Inhalt welchen Eingabeelementes möchtest Du in die Variable a schreiben?
    Siehe dazu SELFHTML, Absendewert von Listen.

    var b = document.Form.Feld.value;

    Den Inhalt welchen Eingabelementes schreibst Du in die Variable b?

    if ((a=="a")&&(b=="CLJ2600N")) {

    Ein hübsches Beispiel dafür, warum man *sinnvolle* Variablenbezeichner verwenden sollte.

    <form name="Form">
    Angabe A:
    <input type="text" name="Feld">
    <br>
    Modell:
    <select name="model" size="1">
          <option>LJ2015</option>
          <option>LJP1505N</option>
          <option>bizhub131f</option>
          <option>LJ2015</option>
          <option>CLJ2600N</option>
    </select>

    Deine Ausgabe überschreibt übrigens den Inhalt der Seite. Ist das so von Dir gewollt?

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Den Inhalt welchen Eingabelementes schreibst Du in die Variable b?

      Vielen Dank für den Hinweis, ich habe den Variablen die falschen Werte zugewiesen. Danke auch an die anderen, die auf meinen Post geantwortet haben. Habe den option-Elemente nun Values zugewiesen.

      Deine Ausgabe überschreibt übrigens den Inhalt der Seite. Ist das so von Dir gewollt?

      Sagen wir mal, ich habe nichts dagegen, dass der Inhalt überschrieben wird. Trotzdem würde ich gern wissen wie sich das verhindern lässt?

      Danke und Gruß

      1. Sagen wir mal, ich habe nichts dagegen, dass der Inhalt überschrieben wird. Trotzdem würde ich gern wissen wie sich das verhindern lässt?

        Indem du das HTML-Dokument über die DOM-Schnittstelle änderst und Inhalte einfügst bzw. auswechselst.

        Du definierst z.B. ein leeres Element, in welches du dann Inhalte einfügst:

        <p id="ausgabe"></p>

        Das sprichst du im JavaScript über die ID an und änderst die innerHTML-Eigenschaft:

        document.[ref:self812;javascript/objekte/document.htm#get_element_by_id@title=getElementById]("ausgabe").[ref:self812;javascript/objekte/all.htm#inner_html@title=innerHTML] = "Hallo!";

        Mathias