WinFuture-Forum.de: Java Script - Fehler Bei Argumentübergabe - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java Script - Fehler Bei Argumentübergabe


#1 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 18. Juli 2006 - 02:04

folgendermaßen sieht die html datei aus. aber schon bei
stelleEins = beginU.indexOf(".");
kommt ein fehler, was ich auf die tatsache zurückgeführt habe,dass beginU nicht mit einem richtigen wert initialisiert wird. was mache ich falsch?

<html>
<head>
<title>Calculator</title>
<script type="text/javascript">
function TageErmitteln(beginU, endU, bland) {
   var anzTage
   var begin
   var end
   var bundesland;
   var stelleEins
   var stelleZwei
   var tag
   var monat
   var jahr;

   stelleEins = beginU.indexOf(".");
   stelleZwei = beginU.lastIndexOf(".");

   tag = beginU.slice(0,stelleEins);
   monat = beginU.slice(stelleEins+1, stelleZwei);
   jahr = beginU.slice(stelleZwei+1, stelleZwei+2);
   begin= new Date(jahr, monat-1, tag);
   
   tag = endU.slice(0,stelleEins);
   monat = endU.slice(stelleEins+1, stelleZwei);
   jahr = endU.slice(stelleZwei+1, stelleZwei+2);
   end = newDate(jahr, monat-1,tag);
   
}
</script>
</head>

<body>
<form name="Urlaubstageberechner" action="">
<p>
<input type="text" name="stD">
<input type="text" name="enD"  maxlength="10">
<label>
<select name="bundesland" size="1">
  <option selected>Baden-W&uuml;rttemberg</option>
  <option>Bayern</option>
  <option>Berlin</option>
  <option>Hessen</option>
  <option>Nordrhein-Westfalen</option>
</select>
</label>
<input name="Schaltfl&auml;che" type="button" onclick="document.Urlaubstageberechner.anzahlTageText.v
alue=TageErmitteln(document.Urlaubstageberechner.stD.Value, document.Urlaubstageberechner.enD.Value, document.Urlaubstageberechner.bundesland.Value)" value="Urlaubstage ermitteln">
<br>
<label><strong>Anzahl Tage</strong>
<input type="text" name="anzahlTageText">
</label>
</p>
</form>
</body>
</html>

0

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 18. Juli 2006 - 02:55

Zitat

var anzTage
var begin

Dreckige Nutzung der Konvention, daß Zeilenumbrüche als Delimiter interpretiert werden dürfen...

Zitat

beginU.indexOf(".");

Anfürhungsstriche statt Apostroph geht auch gerne mal ins Auge.

Zitat

document.Urlaubstageberechner

ist kein gültiges Objekt. Wie auch?

Zitat

.Value

Und dann wunderst du dich, daß dabei nix ordentliches rauskommt?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#3 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 18. Juli 2006 - 11:59

sorry,dachte es hätte nicht gepostet...

hab jetzt alles mal beachtet und das script erweitert. aber es zeigt mir immer noch einen fehler?!

<html>
<head>
<title>Calculator</title>
<script type="text/javascript">
<!--
function TageErmitteln() {
   var anzTage;
   var begin;
   var end;
   var stelleEins;
   var stelleZwei;
   var tag;
   var monat;
   var jahr;
   var beginU = document.Urlaubstageberechner.stD.value;
   var endU   = document.Urlaubstageberechner.enD.value;
   var bundesland  = document.Urlaubstageberechner.bundesland.options[document.Urlaubstageberechner.bundesland.selec
tedIndex].value;

   //Urlaubsanfang ermitteln
   stelleEins = beginU.indexOf('.');
   stelleZwei = beginU.lastIndexOf('.');
   tag = beginU.slice(0,stelleEins);
   monat = beginU.slice(stelleEins+1, stelleZwei);
   jahr = beginU.slice(stelleZwei+1, stelleZwei+2);
   begin= new Date(jahr, monat-1, tag).getTime();

   //Urlaubsende ermitteln
   stelleEins = endU.indexOf('.');
   stelleZwei = endU.lastIndexOf('.');
   tag = endU.slice(0,stelleEins);
   monat = endU.slice(stelleEins+1, stelleZwei);
   jahr = endU.slice(stelleZwei+1, stelleZwei+2);
   end = new Date(jahr, monat-1,tag).getTime;
   
   anzTage = (end-begin) / 86400000;
   alert(anzTage);
   //feiertage in array speichern
   var feiertage = new Array(14);
   feiertage[0] = new Date(end.getYear(), 1, 1);  //neujahr
   feiertage[1] = new Date(end.getYear(), 1, 6); //heilige 3 könige
   feiertage[2] = new Date(OsterSonntag(end.getYear, -2); //karfreitag
   feiertage[3] = new Date(OsterSonntag(end.getYear, 1);  //ostermontag
   feiertage[4] = new Date(end.getYear(), 5, 1); //erster mai
   feiertage[5] = new Date(OsterSonntag(end.getYear, 39); //christi himmelfahrt  
   feiertage[6] = new Date(OsterSonntag(end.getYear, 50); //pfingsmontag
   feiertage[7] = new Date(OsterSonntag(end.getYear, 60); //fronleichnam
   feiertage[8] = new Date(end.getYear(), 10, 3);  //deutsche einheit
   feiertage[9] = new Date(end.getYear(), 11, 1);  //allerheiligen
   feiertage[10] = new Date(end.getYear(), 12, 24);  //für weihnachten 1/2 tag
   feiertage[11] = new Date(end.getYear(), 12, 25);  //1. weihnachtstag
   feiertage[12] = new Date(end.getYear(), 12, 26);  //2. weihnachtstag
   feiertage[13] = new Date(end.getYear(), 12, 31);  //für sylvester 1/2 tag
   for (var i=0; i<14; i++)
   {
	  alert(feiertage[i]);
   }
   if (end = feiertage[1]) {alert("yes");}
}

function OsterSonntag(Jahr, TagesDifferenz)
{
		// Falls kein Datum angegeben, aktuelles Jahr verwenden.
		if ((Jahr == "") || (Jahr == null)) { Jahr = new Date().getYear() }

		// Falls ausserhalb des gültigen Datumsbereichs, kein Ergebnis zurueckgeben
		if ((Jahr < 1970) || (2099 < Jahr)) {  return "Datum muss zwischen 1970 und 2099 liegen"; }

		// Falls keine TagesDifferenz angegeben, TadgesDifferenz auf 0 setzen.
		if ((TagesDifferenz == "") || (TagesDifferenz == null)) { TagesDifferenz = 0; }

		var a = Jahr % 19;
		var d = (19 * a + 24) % 30;
		var Tag = d + (2 * (Jahr % 4) + 4 * (Jahr % 7) + 6 * d + 5) % 7;
		if ((Tag == 35) || ((Tag == 34) && (d == 28) && (a > 10))) { Tag -= 7; }

		var OsterDatum = new Date(Jahr, 2, 22)
		// 86400000 = 24 h * 60 min * 60 s * 1000 ms
		// Die Zahl 86400000 nicht ausklammern, sonst gibt's Probleme bei der Typumwandlung !!
		OsterDatum.setTime(OsterDatum.getTime() + 86400000 * TagesDifferenz + 86400000 * Tag)

		// Uhrzeit aus dem Datum entfernen
		OsterDatum = OsterDatum.toLocaleString()
		OsterDatum = OsterDatum.substring(0, OsterDatum.length - 9);
		return OsterDatum;
}
//-->
</script>
</head>


<body>
<form name="Urlaubstageberechner" action="">
<p>
<input type="text" name="stD">
<input type="text" name="enD"  maxlength="10">
<label>
<select name="bundesland" size="1">
  <option value="Baden-Würtenberg" selected>Baden-Württemberg</option>
  <option value="Bayern">Bayern</option>
  <option value="Berlin">Berlin</option>
  <option value="Hessen">Hessen</option>
  <option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
</select>
</label>
<input name="Schaltfläche" type="button" onclick="document.Urlaubstageberechner.anzahlTageText.v
alue=TageErmitteln()" value="Urlaubstage ermitteln">
<br>
<label><strong>Anzahl Tage</strong>
<input type="text" name="anzahlTageText">
</label>
</p>
</form>
</body>
</html>

0

#4 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 18. Juli 2006 - 12:01

Zitat

document.Urlaubstageberechner

Gibt's nicht! Schau dir mal DOM an und mach's richtig! :o
0

#5 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 18. Juli 2006 - 12:11

hmmm, also bevor ich das feiertage array und die entsprechende funktion eingefügt habe, ging das ganze. von daher muss das doch richtig sein?!

was meinst du mit DOM?
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 18. Juli 2006 - 12:47

Zitat

document.Urlaubstageberechner

ist nachwievor kein gültiges Objekt.

Zitat

new Date(jahr, monat-1, tag).getTime()

Wie wär's mal mit ordentlicher Klammerung?

Zitat

new Date(OsterSonntag(end.getYear, -2);

Und dann gab's noch sowas mit Anzahl öffnender und schließender Klammern sei immer gleich...

Zitat

was meinst du mit DOM?

Autsch. Kein Wunder, daß du nur mit einer "hoffentlich macht das ein Browser noch mit"-Variante auf die Objekte zugreifst.


Und verdammt nochmal, markiere doch wenigstens mal, wo genau die Fehler auftreten und was es für Fehler sind. Oder machst du etwa gar frei Schnauze statt mit JavaScript-Debugger?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 18. Juli 2006 - 13:04

hier der verbesserte code. wegen DOM muss ich erst noch googeln
fehler in zeile 39, zeichen 4: objekt unterstützt diese eigenschaft oder methode nicht
der fehler ist bei der ersten array zuweisung, also bei neujahr. anzTage gibt es noch aus
<html>
<head>
<title>Calculator</title>
<script type="text/javascript">
<!--
function TageErmitteln() {
   var anzTage;
   var begin;
   var end;
   var stelleEins;
   var stelleZwei;
   var tag;
   var monat;
   var jahr;
   var beginU = document.Urlaubstageberechner.stD.value;
   var endU   = document.Urlaubstageberechner.enD.value;
   var bundesland  = document.Urlaubstageberechner.bundesland.options[document.Urlaubstageberechner.bundesland.selec
tedIndex].value;

   //Urlaubsanfang ermitteln
   stelleEins = beginU.indexOf('.');
   stelleZwei = beginU.lastIndexOf('.');
   tag = beginU.slice(0,stelleEins);
   monat = beginU.slice(stelleEins+1, stelleZwei);
   jahr = beginU.slice(stelleZwei+1, stelleZwei+2);
   begin= new Date(jahr, monat-1, tag).getTime();

   //Urlaubsende ermitteln
   stelleEins = endU.indexOf('.');
   stelleZwei = endU.lastIndexOf('.');
   tag = endU.slice(0,stelleEins);
   monat = endU.slice(stelleEins+1, stelleZwei);
   jahr = endU.slice(stelleZwei+1, stelleZwei+2);
   end = new Date(jahr, monat-1,tag).getTime();
   
   anzTage = (end-begin) / 86400000;
   alert(anzTage);
   //feiertage in array speichern
   var feiertage = new Array(14);
   feiertage[0] = new Date(end.getYear(), 1, 1);  //neujahr
   feiertage[1] = new Date(end.getYear(), 1, 6); //heilige 3 könige
   feiertage[2] = new Date(OsterSonntag(end.getYear(), -2)); //karfreitag
   feiertage[3] = new Date(OsterSonntag(end.getYear(), 1));  //ostermontag
   feiertage[4] = new Date(end.getYear(), 5, 1); //erster mai
   feiertage[5] = new Date(OsterSonntag(end.getYear(), 39)); //christi himmelfahrt  
   feiertage[6] = new Date(OsterSonntag(end.getYear(), 50)); //pfingsmontag
   feiertage[7] = new Date(OsterSonntag(end.getYear(), 60)); //fronleichnam
   feiertage[8] = new Date(end.getYear(), 10, 3);  //deutsche einheit
   feiertage[9] = new Date(end.getYear(), 11, 1);  //allerheiligen
   feiertage[10] = new Date(end.getYear(), 12, 24);  //für weihnachten 1/2 tag
   feiertage[11] = new Date(end.getYear(), 12, 25);  //1. weihnachtstag
   feiertage[12] = new Date(end.getYear(), 12, 26);  //2. weihnachtstag
   feiertage[13] = new Date(end.getYear(), 12, 31);  //für sylvester 1/2 tag
   for (var i=0; i<feiertage.length; i++)
   {
	  alert(feiertage[i]);
   }
   if (end = feiertage[1]) {alert("yes");}
}

function OsterSonntag(Jahr, TagesDifferenz)
{
		// Falls kein Datum angegeben, aktuelles Jahr verwenden.
		if ((Jahr == "") || (Jahr == null)) { Jahr = new Date().getYear() }

		// Falls ausserhalb des gültigen Datumsbereichs, kein Ergebnis zurueckgeben
		if ((Jahr < 1970) || (2099 < Jahr)) {  return "Datum muss zwischen 1970 und 2099 liegen"; }

		// Falls keine TagesDifferenz angegeben, TadgesDifferenz auf 0 setzen.
		if ((TagesDifferenz == "") || (TagesDifferenz == null)) { TagesDifferenz = 0; }

		var a = Jahr % 19;
		var d = (19 * a + 24) % 30;
		var Tag = d + (2 * (Jahr % 4) + 4 * (Jahr % 7) + 6 * d + 5) % 7;
		if ((Tag == 35) || ((Tag == 34) && (d == 28) && (a > 10))) { Tag -= 7; }

		var OsterDatum = new Date(Jahr, 2, 22)
		// 86400000 = 24 h * 60 min * 60 s * 1000 ms
		// Die Zahl 86400000 nicht ausklammern, sonst gibt's Probleme bei der Typumwandlung !!
		OsterDatum.setTime(OsterDatum.getTime() + 86400000 * TagesDifferenz + 86400000 * Tag)

		// Uhrzeit aus dem Datum entfernen
		OsterDatum = OsterDatum.toLocaleString()
		OsterDatum = OsterDatum.substring(0, OsterDatum.length - 9);
		return OsterDatum;
}
//-->
</script>
</head>


<body>
<form name="Urlaubstageberechner" action="">
<p>
<input type="text" name="stD">
<input type="text" name="enD"  maxlength="10">
<label>
<select name="bundesland" size="1">
  <option value="Baden-Würtenberg" selected>Baden-Württemberg</option>
  <option value="Bayern">Bayern</option>
  <option value="Berlin">Berlin</option>
  <option value="Hessen">Hessen</option>
  <option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
</select>
</label>
<input name="Schaltfläche" type="button" onclick="document.Urlaubstageberechner.anzahlTageText.v
alue=TageErmitteln()" value="Urlaubstage ermitteln">
<br>
<label><strong>Anzahl Tage</strong>
<input type="text" name="anzahlTageText">
</label>
</p>
</form>
</body>
</html>

Dieser Beitrag wurde von bLaCkRaBbIt bearbeitet: 18. Juli 2006 - 13:17

0

#8 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 18. Juli 2006 - 13:12

Logisch, da "end" nun einmal ein Objekt vom Typ String, Object oder void ist (je nahc Implementierung). Weil du zu #!{[& zum Klammern bist.

Zitat

wegen DOM muss ich erst noch googeln

Nochmal: Es gibt einigen Webbrowser, für die "document.Urlaubstageberechner" kein gültiges Objekt ist und in Zukunft würde diese verkehrte Rücktwärtskompatbilität auch abgeschafft werden. "document" ist ein JavaScript-Objekt, daß neben seiner definierten Funktionen in JavaScript nur noch seine Funktion als DOM-Document hat. Die Einbindung von DOM-Elementen in den Namensraum ist ein altes Relikt, das langsam stirbt und sowieso nie richtig spezifiziert war.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#9 Mitglied ist offline   bLaCkRaBbIt 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.433
  • Beigetreten: 08. November 04
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Karlsbad

geschrieben 19. Juli 2006 - 10:14

hat sich jetzt alles erledigt. hab mir semikolons und richtige klammerung angewöhnt und jetzt funktioniert alles :)
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0