Hej hej
Jag har en sida som ligger i en massa frames, på denna sida ska jag anropa en javascriptfunktion (i ett formulär):
<input type="text" name="nyhetBliKvarTom" size="55" maxlength="8" class="notistext" value="" onBlur="chkDate('formAdmSidaNyhetRed.nyhetBliKvarTom')">
Koden för för detta javascript ser ut så här:
/////
// kollar datum, om fältet är siffor och om datumet är större än dagens datum YYYYMMDD
// indata är 'formulärnamn.fältnamn'
/////
function chkDate (falt)
{
var faltvarde = eval ("document." + falt + ".value"); // här kollar jag vilket värde som fältet har
faltvarde = Trim(faltvarde);
if (isInteger (faltvarde) && faltvarde.length == 8) // kollar om det inmatade värdet är 8 st siffror
{
// dela upp värdet så att jag kan kolla månad och dag
var faltvardeAr = faltvarde.substring(0,4); // YYYY
var faltvardeManad = faltvarde.substring(4,6); // MM
var faltvardeDag = faltvarde.substring(6,8); // DD
var err = "ingetfel";
// kollar så att man inte skriver in en fel månad
if ((faltvardeManad < 1) || (faltvardeManad > 12))
{
err = "Månaden är felaktig";
}
else
{
// hålla koll på skott-år
if ((faltvardeAr % 4 == 0) || (faltvardeAr % 100 == 0) || (faltvardeAr % 400 == 0))
{
var skottar = 1;
}
// kollar så att man inte skriver in fel dag
if (faltvardeDag < 1)
{
err = "Månaden kan inte ha mindre än en dag";
}
// februari koll om det är skott-år
if ((faltvardeManad == 2) && (skottar == 1) && (faltvardeDag > 29))
{
err = "Det är skottår, d.v.s månaden har inte mer än 29 dagar";
}
// februari koll om det INTE är skott-år
if ((faltvardeManad == 2) && (skottar != 1) && (faltvardeDag > 28))
{
err = "Det är inte skott år, d.v.s. månaden kan inte ha mer än 28 dagar";
}
// kollar de andra månaderna (31-dagars månaderna)
if ((faltvardeDag > 31) && ((faltvardeManad == "01") || (faltvardeManad == "03") || (faltvardeManad == "05") || (faltvardeManad == "07") || (faltvardeManad == "08") || (faltvardeManad == "10") || (faltvardeManad == "12")))
{
err = "Månaden har inte mer än 31 dagar";
}
// kollar de andra månaderna (30-dagars månaderna)
if ((faltvardeDag > 30) && ((faltvardeManad == "04") || (faltvardeManad == "06") || (faltvardeManad == "09") || (faltvardeManad == "11")))
{
err = "Månaden har inte mer än 30 dagar";
}
}
// har där kommit ett felmeddelande?
if (err != "ingetfel")
{
alert (err);
eval ("document." + falt + ".select()"); // makerar allt i rutan
eval ("document." + falt + ".focus()"); // sätter focus i rutan igen
}
else
{
datum = new Date();
if ((datum.getMonth()+1) < 10) // om månadsnummret är mindre än -> 10 lägg till en nolla
{
var manaden = "0" + (datum.getMonth()+1);
}
else
{
var manaden = "" + (datum.getMonth()+1);
}
if (datum.getDate() < 10) // om dagsnummret är mindre än -> 10 lägg till en nolla
{
var dagen = "0" + datum.getDate();
}
else
{
var dagen = "" + datum.getDate();
}
var dagensdatum = "" + datum.getFullYear() + manaden + dagen;
if (dagensdatum > faltvarde)
{
alert("Du måste ange ett datum som ligger i framtiden.");
eval ("document." + falt + ".select()"); // makerar allt i rutan
eval ("document." + falt + ".focus()"); // sätter focus i rutan igen
}
}
}
else
{
if (!isBlank (faltvarde)) // om det inte är 8 siffror ska den även göra en koll om fältet är tomt
{
alert ("Formatet du ska mata in är:\nYYYYMMDD\nD.v.s. åtta siffror.\nAlternativt matar du inte in något alls.");
eval ("document." + falt + ".select()"); // makerar allt i rutan
eval ("document." + falt + ".focus()"); // sätter focus i rutan igen
}
}
}
Tog med hela scriptet men det e bara en grej som strular.
Det är när jag ska hänvisa till fältet t.e.x eval ("document." + falt + ".select()");. Det e alltså 'document'-delen som inte funkar i NN, jag har även testat med 'this'. Det funkar kanon i IE.
Vad ska jag skriva istället för 'document' för att det ska funka?
Som sagt så ligger denna sidan i en bit ner i frames.
Ska kanske lägga till att scriptet funkar bra även i NN när sidan inte ligger i frames.
Bugar och tackar i förhand? :D
/Grodan