mormel: Eigenschaft eines Objektes vorhanden?

Hallo,

dies wird dynamisch in eine Datei geschrieben:

var artikel = new Object();  
artikel.A101 = '1.05';  
artikel.A102 = '0.95';  
artikel.A103 = '1.00';  
artikel.A104 = '2.50';  
// ....

also ein Object mit Eigenschaft Artikelnr und zugehörigem Preis.

In einem Formular auf der Seite kann eine Bestellung eingegeben werden. Man gibt Anzahl und Artikelnr ein und dementsprechend soll die aktuelle Summe angezeigt werden. Das funktioniert - solange man eine gültige Artikelnr in das Feld eingibt:

(Ausschnitt vereinfacht)
sum += document.bestellung.anzahl.value * artikel.eval(document.bestellung.artikelnr.value);

Nun habe ich folgendes nach google-Recherche versucht:

isDefined = function(variable)  
{  
      return this[variable] === undefined ? false : true;  
};  
  
if(isDefined(artikel.eval(document.bestellung.artikelnr.value)))  
      sum += artikel.eval(document.bestellung.artikelnr.value);  
else  
      alert("ungültige Artikelnummer!");

aber dann kommt folgende Fehlermeldung:
XYZ001(Beispiel für ungültige ArtNr) ist nicht vorhanden (Firefox Javascript-Konsole).

Wie kann ich überprüfen, ob die Artikelnummer im Object artikel enthalten ist?

Danke und Gruß
mormel

  1. (Ausschnitt vereinfacht)
    sum += document.bestellung.anzahl.value * artikel.eval(document.bestellung.artikelnr.value);

    Wozu eval? Das hier an der Stelle falsch und überflüssig.

    Nun habe ich folgendes nach google-Recherche versucht:

    isDefined = function(variable)

    {
          return this[variable] === undefined ? false : true;
    };

    Erstmal ist diese Schreibweise so zwar nicht falsch aber unübersichtlich, du machst nichts andere als eine normale Funktion erstellen function isDefined() und innerhalb dieser Funktion ist this gleich window. Du willst also Wissen ob eine Variabel definert ist. Das geht zwar manchmal so, aber undefined ist nicht in allen Browsern ein Schlüsselwort, daher bevorzuge ich diese Variante: [code lang=javascript]function isDefined(w){ return typeof w != 'undefined'; }

      
    
    > if(isDefined(artikel.eval(document.bestellung.artikelnr.value)))  
    >       sum += artikel.eval(document.bestellung.artikelnr.value);  
    > else  
    >       alert("ungültige Artikelnummer!");[/code]  
      
    Ob ein Objekt eine Eigenschaft hat läßt sich einfach mit objekt['eigenschaft'] überprüfen, dazu ist ein test auf defined erstmal gar nicht nötig.  
      
    also in etwa so:  
    ~~~javascript
    var art_nr = document.bestellung.artikelnr.value;  
      
    if(artikel[art_nr])  
    sum += artikel[artikel[art_nr]];  
    else  
    alert("ungültige Artikelnummer!")  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Hallo Struppi,

      das eval lag mir auch etwas quer im Magen - danke für Deine Ausführungen, jetzt funktioniert es!

      Gruß
      mormel