Jag har ett formulär som räknar ut vissa datum baserat på ett utgångsdatum som besökaren fyller i själv. OnSubmit så fylls då ett antal INPUTs med uträknade datum.
Tex:
Uträkningen av...
fetalmonth = weeks + 1 + ":e veckan" + " av 40";
pregform.fetalweeks.value = fetalweeks;
Läggs onSubmit i
<input type=text name=fetalweeks value="">
Formuläret funkar bra! :)
Men, jag undrar hur jag kan skriva ut innehållet i ovan kod så att jag kan lägga innehållet i en länk:
Som en response.write i ASP liksom.
Ex: <a href="#.asp?V=fetalweeks">Klicka här för att läsa mer om fetalweeks"></a>
Hoppas att nån JavaScripts guru förstår vad jag menar...
Help!
/A :)
Jesper TMedlem sedan nov. 20017 144 inlägg Fattar inte riktigt hur du menar men, i body:
<script type="text/javascript">
var fetalweeks=20;
document.write('<a href="#.asp?V='+fetalweeks+'">Klicka här för att läsa mer om fetalweeks</a>');
</script>
Tack Jesper fast nja, nä....formuläret submittas aldrig och det blir lite fel. :(
Jag bifogar kod med förklaring så kanske du, eller någon annan guru, förstår bättre.
Det är bara att spara koden som html så funkar formuläret (blir lite tydligare).
[1]
<form onSubmit="return pregnancyCalc(this);">
<table border=0 cellspacing="0" cellpadding="0" class="breadjustify">
<tr>
<td valign="top" colspan="2">
************* Testa att skriva in 03/27/2004 i "Sista mens första dag" ***************
</td>
</tr>
<tr>
<td valign="middle" width="170">Sista mens första dag</td>
<td valign="top">
<input type=text name=menstrual value="" class="textfield" size=20 maxlength=10> (MM/DD/ÅÅÅÅ)
</td>
</tr>
<tr>
<td valign="middle">Menscykelns längd</td>
<td valign="top">
<input type=text name=cycle value="" class="textfield" size=20 maxlength=3>
</td>
</tr>
<tr>
<td valign="middle">Tid mellan ägglossning och mens</td>
<td valign="top">
<input type=text name=luteal value="" class="textfield" size=20 maxlength=3>
</td>
</tr>
<tr>
<td valign="top" colspan="2">
</td>
</tr>
<tr>
<td valign="middle"> </td>
<td valign="top">
<input type=submit value="Beräkna »" class="button">
</td>
</tr>
</table>
<p>
<table cellspacing="0" cellpadding="0" border="0" class="breadjustify">
<tr>
<td width="174" valign="middle">Befruktning skedde runt</td>
<td valign="top">
<input type=text name=conception value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du har gått</td>
<td valign="top">
<input type=text name=fetalage value="" class="textfield" size=40 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle"><font color=red>Men du är i</font></td>
<td valign="top">
<input type=text name=fetalweeks value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du är i</td>
<td valign="top">
<input type=text name=fetalmonth value="" class="textfield" size=25 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du är i</td>
<td valign="top">
<input type=text name=fetalmonths value="" class="textfield" size=25 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du har gått</td>
<td valign="top">
<input type=text name=fetaldays value="" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Och har ca</td>
<td valign="top">
<input type=text name=fetalkvar value="" class="textfield" size=40 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Ungefärlig förlossningsdag</td>
<td valign="top">
<input type=text name=duedate value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;"> +/- 2 veckor
</td>
</tr>
<tr>
<td valign="middle" colspan="2">
<br><br>
<b>Här</b> vill jag skriva ut en länk som innehåller veckan man är i.<br>
Jag måste alltså på något sätt använda informationen fetalweeks, som tex displayas efter rödmarkerad text, och den ska då skrivas ut här:<p>
<'a href="minLänk.asp?vecka=HärKommerVeckonumret">Klicka här för att läsa mer om vecka "HärKommerVeckonumret"<'/a><br>
Den skulle då se ut som följande, om man utgår från 03/27/2004: <br>
<a href="minLänk.asp?vecka=10">Klicka här för att läsa mer om vecka 10</a><p>
Jag vet inte om det är mer tydligt nu... ;) Jag får det iallafall inte att fungera.
</td>
</tr>
</table>
</form>
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function isValidDate(dateStr) {
// -->
// Checks for the following valid date formats:
// MM/DD/YY MM/DD/YYYY MM-DD-YY MM-DD-YYYY
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Datumet är inte i rätt format.")
return false;
}
month = matchArray[1]; // parse date into variables
day = matchArray[3];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Månad måste vara mellan 1 och 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Dag måste vara mellan 1 och 31");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Månad "+month+" har inte 31 dagar!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("Februari " + year + " har inte " + day + " dagar!");
return false;
}
}
return true;
}
function dispDate(dateObj) {
month = dateObj.getMonth()+1;
month = (month < 10) ? "0" + month : month;
day = dateObj.getDate();
day = (day < 10) ? "0" + day : day;
year = dateObj.getYear();
if (year < 2000) year += 1900;
return (year + "-" + month + "-" + day);
}
function pregnancyCalc(pregform) {
menstrual = new Date(); // creates new date objects
ovulation = new Date();
duedate = new Date();
today = new Date();
cycle = 0, luteal = 0; // sets variables to invalid state ==> 0
if (isValidDate(pregform.menstrual.value)) { // Validates menstual date
menstrualinput = new Date(pregform.menstrual.value);
menstrual.setTime(menstrualinput.getTime())
}
else return false; // otherwise exits
cycle = (pregform.cycle.value == "" ? 28 : pregform.cycle.value); // defaults to 28
// validates cycle range, from 22 to 45
if (pregform.cycle.value != "" && (pregform.cycle.value < 22 || pregform.cycle.value > 45)) {
alert("Din cykel är antingen för lång eller för kort för att \n"
+ "beräkningen ska vara helt korrekt! Vi kommer ändån att försöka \n"
+ "slutföra beräkningen med de uppgifterna som du angett. ");
}
luteal = (pregform.luteal.value == "" ? 14 : pregform.luteal.value); // defaults to 14
// validates luteal range, from 9 to 16
if (pregform.luteal.value != "" && (pregform.luteal.value < 9 || pregform.luteal.value > 16)) {
alert("Tiden mellan ägglossning och mens är antingen för lång eller för kort för att \n"
+ "beräkningen ska vara helt korrekt! Vi kommer ändån att försöka \n"
+ "slutföra beräkningen med de uppgifterna som du angett. ");
}
// sets ovulation date to menstrual date + cycle days - luteal days
// the '*86400000' is necessary because date objects track time
// in milliseconds; 86400000 milliseconds equals one day
ovulation.setTime(menstrual.getTime() + (cycle*86400000) - (luteal*86400000));
pregform.conception.value = dispDate(ovulation);
// sets due date to ovulation date plus 266 days
duedate.setTime(ovulation.getTime() + 266*86400000);
pregform.duedate.value = dispDate(duedate);
// sets fetal age to 14 + 266 (pregnancy time) - time left
var fetalage = 14 + 266 - ((duedate - today) / 86400000);
weeks = parseInt(fetalage / 7); // sets weeks to whole number of weeks
days = Math.floor(fetalage % 7); // sets days to the whole number remainder
//sets fetal age to 14 + 266 (pregnancy time) - time left
var fetaldays = 14 + 266 - (duedate - today);
weeks = parseInt(fetalage / 7); // sets weeks to whole number of weeks
days = Math.floor(fetalage % 7); // sets days to the whole number remainder
// fetal age message, automatically includes 's' on week and day if necessary
fetalage = weeks + " fullgångna veckor" +" och " + days + " dag(ar)";
pregform.fetalage.value = fetalage;
fetaldays = weeks*7 + days + " dagar" + " av 280";
pregform.fetaldays.value = fetaldays;
fetalweeks = weeks + 1 + ":e veckan" + "";
pregform.fetalweeks.value = fetalweeks;
fetalmonth = weeks + 1 + ":e veckan" + " av 40";
pregform.fetalweeks.value = fetalweeks;
fetalkvar = 280 - (weeks*7) - days + " dagar kvar till förlossningsdagen";
pregform.fetalkvar.value = fetalkvar;
fetalmonth = Math.floor(weeks/4)+1 + ":e lunarmånaden" + " av 10";
pregform.fetalmonth.value = fetalmonth;
fetalmonths = Math.floor((weeks*7 + days)/31.111111) + 1 + ":e graviditetsmånaden" + " av 9";
pregform.fetalmonths.value = fetalmonths;
return false; // form should never submit, returns false
}
// End -->
</script>
[/1]
Jesper TMedlem sedan nov. 20017 144 inlägg Slår jag in det där datumet så får jag visserligen -43 och 582 dagar kvar till förlossningsdagen!!! ;)
Men detta är iaf mitt förslag:
<SCRIPT TYPE="text/JavaScript">
<!-- Begin
function isValidDate(dateStr) {
// -->
// Checks for the following valid date formats:
// MM/DD/YY MM/DD/YYYY MM-DD-YY MM-DD-YYYY
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Datumet är inte i rätt format.")
return false;
}
month = matchArray[1]; // parse date into variables
day = matchArray[3];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Månad måste vara mellan 1 och 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Dag måste vara mellan 1 och 31");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Månad "+month+" har inte 31 dagar!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("Februari " + year + " har inte " + day + " dagar!");
return false;
}
}
return true;
}
function dispDate(dateObj) {
month = dateObj.getMonth()+1;
month = (month < 10) ? "0" + month : month;
day = dateObj.getDate();
day = (day < 10) ? "0" + day : day;
year = dateObj.getYear();
if (year < 2000) year += 1900;
return (year + "-" + month + "-" + day);
}
function pregnancyCalc(pregform) {
menstrual = new Date(); // creates new date objects
ovulation = new Date();
duedate = new Date();
today = new Date();
cycle = 0, luteal = 0; // sets variables to invalid state ==> 0
if (isValidDate(pregform.menstrual.value)) { // Validates menstual date
menstrualinput = new Date(pregform.menstrual.value);
menstrual.setTime(menstrualinput.getTime())
}
else return false; // otherwise exits
cycle = (pregform.cycle.value == "" ? 28 : pregform.cycle.value); // defaults to 28
// validates cycle range, from 22 to 45
if (pregform.cycle.value != "" && (pregform.cycle.value < 22 || pregform.cycle.value > 45)) {
alert("Din cykel är antingen för lång eller för kort för att \n"
+ "beräkningen ska vara helt korrekt! Vi kommer ändån att försöka \n"
+ "slutföra beräkningen med de uppgifterna som du angett. ");
}
luteal = (pregform.luteal.value == "" ? 14 : pregform.luteal.value); // defaults to 14
// validates luteal range, from 9 to 16
if (pregform.luteal.value != "" && (pregform.luteal.value < 9 || pregform.luteal.value > 16)) {
alert("Tiden mellan ägglossning och mens är antingen för lång eller för kort för att \n"
+ "beräkningen ska vara helt korrekt! Vi kommer ändån att försöka \n"
+ "slutföra beräkningen med de uppgifterna som du angett. ");
}
// sets ovulation date to menstrual date + cycle days - luteal days
// the '*86400000' is necessary because date objects track time
// in milliseconds; 86400000 milliseconds equals one day
ovulation.setTime(menstrual.getTime() + (cycle*86400000) - (luteal*86400000));
pregform.conception.value = dispDate(ovulation);
// sets due date to ovulation date plus 266 days
duedate.setTime(ovulation.getTime() + 266*86400000);
pregform.duedate.value = dispDate(duedate);
// sets fetal age to 14 + 266 (pregnancy time) - time left
var fetalage = 14 + 266 - ((duedate - today) / 86400000);
weeks = parseInt(fetalage / 7); // sets weeks to whole number of weeks
days = Math.floor(fetalage % 7); // sets days to the whole number remainder
//sets fetal age to 14 + 266 (pregnancy time) - time left
var fetaldays = 14 + 266 - (duedate - today);
weeks = parseInt(fetalage / 7); // sets weeks to whole number of weeks
days = Math.floor(fetalage % 7); // sets days to the whole number remainder
// fetal age message, automatically includes 's' on week and day if necessary
fetalage = weeks + " fullgångna veckor" +" och " + days + " dag(ar)";
pregform.fetalage.value = fetalage;
fetaldays = weeks*7 + days + " dagar" + " av 280";
pregform.fetaldays.value = fetaldays;
fetalweeks = weeks + 1 + ":e veckan" + "";
pregform.fetalweeks.value = fetalweeks;
fetalmonth = weeks + 1 + ":e veckan" + " av 40";
pregform.fetalweeks.value = fetalweeks;
fetalkvar = 280 - (weeks*7) - days + " dagar kvar till förlossningsdagen";
pregform.fetalkvar.value = fetalkvar;
fetalmonth = Math.floor(weeks/4)+1 + ":e lunarmånaden" + " av 10";
pregform.fetalmonth.value = fetalmonth;
fetalmonths = Math.floor((weeks*7 + days)/31.111111) + 1 + ":e graviditetsmånaden" + " av 9";
pregform.fetalmonths.value = fetalmonths;
[b]document.getElementById("myWeek").innerHTML='<a href="minlänk.asp?vecka='+weeks+'">Klicka här för att läsa mer om vecka '+ weeks +'</a>';[/b]
return false; // form should never submit, returns false
}
// End -->
</script>
<form onSubmit="return pregnancyCalc(this);">
<table border=0 cellspacing="0" cellpadding="0" class="breadjustify">
<tr>
<td valign="top" colspan="2">
************* Testa att skriva in 03/27/2004 i "Sista mens första dag" ***************
</td>
</tr>
<tr>
<td valign="middle" width="170">Sista mens första dag</td>
<td valign="top">
<input type=text name=menstrual value="" class="textfield" size=20 maxlength=10> (MM/DD/ÅÅÅÅ)
</td>
</tr>
<tr>
<td valign="middle">Menscykelns längd</td>
<td valign="top">
<input type=text name=cycle value="" class="textfield" size=20 maxlength=3>
</td>
</tr>
<tr>
<td valign="middle">Tid mellan ägglossning och mens</td>
<td valign="top">
<input type=text name=luteal value="" class="textfield" size=20 maxlength=3>
</td>
</tr>
<tr>
<td valign="top" colspan="2">
</td>
</tr>
<tr>
<td valign="middle"> </td>
<td valign="top">
<input type=submit value="Beräkna »" class="button">
</td>
</tr>
</table>
<p>
<table cellspacing="0" cellpadding="0" border="0" class="breadjustify">
<tr>
<td width="174" valign="middle">Befruktning skedde runt</td>
<td valign="top">
<input type=text name=conception value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du har gått</td>
<td valign="top">
<input type=text name=fetalage value="" class="textfield" size=40 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle"><font color=red>Men du är i</font></td>
<td valign="top">
<input type=text name=fetalweeks value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du är i</td>
<td valign="top">
<input type=text name=fetalmonth value="" class="textfield" size=25 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du är i</td>
<td valign="top">
<input type=text name=fetalmonths value="" class="textfield" size=25 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Du har gått</td>
<td valign="top">
<input type=text name=fetaldays value="" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Och har ca</td>
<td valign="top">
<input type=text name=fetalkvar value="" class="textfield" size=40 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;">
</td>
</tr>
<tr>
<td valign="middle">Ungefärlig förlossningsdag</td>
<td valign="top">
<input type=text name=duedate value="" class="textfield" size=20 style="border-style:solid;border-top-color:#FFFFFF;border-right-color:#FFFFFF;border-left-color:#FFFFFF;border-bottom-color:#FFFFFF;font:verdana;font-size:9px;color:#73717B;"> +/- 2 veckor
</td>
</tr>
<tr>
<td valign="middle" colspan="2">
<br>
[b]<div id="myWeek"></div>[/b]
</td>
</tr>
</table>
</form>
:f TACK Jesper...oh store guru! Ska försöka studera din lösning och lära mig något också. :)
DOCK...
Om man nu lägger in 03/27/2004 i "Sista mens" så är man ju i vecka 10 (9 fullgågna plus 2 dagar men ändock i vecka 10)...nu får jag fram 9.
I koden står det ju week + 1 på ett antal ställen vilket jag då antar är den bit jag saknar.
Vart lägger jag in + 1 så att jag får vecka 10 i länken istället för vecka 9?
Jesper TMedlem sedan nov. 20017 144 inlägg Tack för komplimanger... :r
Guru...ja, allt är ju relativt. ;)
Du kan deklarera om variabeln weeks strax innan:
weeks=parseInt(weeks)+1;
document.getElementById("myWeek").innerHTML='<a href="minlänk.asp?vecka='+weeks+'">Klicka här för att läsa mer om vecka '+weeks+'</a>';
Tack Jesper - det funkar perfekt! :f :) :bire
Klart att du är värd komplimanger. JavaScript är djävulens påfund och alla som begriper det där jittret av kod förtjänar massor, och jag menar massor, av beröm! ;)
TACK!