HighDots Forums  

Object Abfrage läuft nicht korrekt

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Object Abfrage läuft nicht korrekt in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Stefan Becker
 
Posts: n/a

Default Object Abfrage läuft nicht korrekt - 01-26-2008 , 05:25 AM






Hallo,

ich habe ein Problem mit einer Object Abfrage/Beschreibung.. Wenn ich
ein Object abfrage, welches noch nicht existiert, wird mir aber
angegeben, dass diese existiert.

var besetzte_posten = {}; //Globales Object

function GruppenstaerkeBerechnen(funktion,posten,fahrzeug)
{
[..]
var tmp2 = fahrzeug+'_'+posten; // Ist es die richtige Auswahl
if(typeof besetzte_posten.tmp2 == "undefined") //Hier wird gestestet ob
das Object bereits existiert
{
alert("Objekt noch nicht vorhanden");
besetzte_posten.tmp2 = "bar"; //Beschreibe
Object
alert("Objekt beschrieben");
}
else
{
alert("Objekt vorhanden");
if(document.getElementById(fahrzeug+'_'+posten).va lue == '-')
{
delete besetzte_posten.tmp2; // Object löschen
alert("Objekt gelöscht");
}
else
{
}
[..]

Wenn ich die erste Sache auswähle läuft es korrekt, wenn ich aber ein
weiteres Feld auswähle, welches noch nicht verwendet wurde, kommt Object
vorhanden. Das kann doch einetlich nicht sein?


--
MfG

Stefan Becker


Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Object Abfrage läuft nicht korrekt - 01-26-2008 , 06:18 AM






Stefan Becker wrote:
Quote:
ich habe ein Problem mit einer Object Abfrage/Beschreibung.. Wenn ich
ein Object abfrage, welches noch nicht existiert, wird mir aber
angegeben, dass diese existiert.

var besetzte_posten = {}; //Globales Object
Nein, das ist eine (mglw. globale) Variable, die eine Referenz zu einem
Object-Objekt speichert. Globale Variablen sind Eigenschaften des
*eingebauten* Globalen Objekts, welches nur über `this' im globalen
Ausführungskontext zuverlässig referenzierbar ist.

Quote:
function GruppenstaerkeBerechnen(funktion,posten,fahrzeug)
{
[..]
var tmp2 = fahrzeug+'_'+posten; // Ist es die richtige Auswahl
if(typeof besetzte_posten.tmp2 == "undefined") //Hier wird gestestet ob
das Object bereits existiert
Nein, es wird getestet, ob der Lesezugriff auf die tmp2-Eigenschaft des mit
`besetzte_posten' referenzierten Objekts einen Wert liefert, der den Typ
Undefined hat. Das ist dann der Fall, wenn die Eigenschaft den Wert
`undefined' hat oder wenn das Objekt diese Eigenschaft nicht hat.

Du suchst

if (typeof besetzte_posten[tmp2] == "undefined")
{
// ...
}

In neueren Implementationen funktioniert in Deinem Fall auch

if (besetzte_posten.hasOwnProperty(tmp2))
{
// ...
}

Siehe http://PointedEars.de/es-matrix

Quote:
[...]
if(document.getElementById(fahrzeug+'_'+posten).va lue == '-')
Wenn document.getElementById(fahrzeug+'_'+posten) keine Objektreferenz
liefert, führt diese Zeile zu einem Laufzeitfehler:

http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-getElBId

Daher:

var o = document.getElementById(fahrzeug + '_' + posten);
if (o)
{
if (o.value == '-')
{
// ...
}
else
{
// ...
}
}

Quote:
[...]
delete besetzte_posten.tmp2; // Object löschen
Nein, hier wird die tmp2-Eigenschaft des mit `besetzte_posten'
referenzierten Objekts gelöscht. Ein Objekt wird nur dann gelöscht, d.h.
der dafür reservierte Speicher freigegeben, wenn es nicht mehr referenziert
wird. Selbst besetzte_posten[tmp2] referenziert in Deinem Fall kein Objekt,
sondern einen primitiven string-Wert, nämlich "bar".

Bitte lies http://developer.mozilla.org/en/docs/JavaScript ff.

Ausserdem ist Dein Quelltext nur mit Mühe lesbar. Quelltext sollte mit zwei
oder vier Leerzeichen je Ebene eingerückt werden, und Vorkommentierung ist
besser als Nachkommentierung.


PointedEars
--
Wenn Dein Browser apply nicht kennt, dann mußt Du den Browser wechseln.
Man kann den Appendix nicht mit dem Bulldozer operieren und sich dann
über ausgefranzte Narben beklagen, obwohl bekannt ist, daß dafür
chirurgisches Besteck erforderlich ist. -- Georg Maaß in dcljs


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.