|
| Indsætte datoer afhængdig af måneden Fra : Kurt G |
Dato : 12-02-11 14:52 |
|
Jeg har en formular, hvor man skal indsætte datoer for nogle møder
( http://www.ikasthistorie.dk/NyeMoeder.asp).
Jeg vil gerne have det sådan, at den højeste dato afhænger af, hvilken
måned, man har valgt!
Det kan man, så vidt jeg ved, ikke med hverken ASP eller PHP, men kan det
ikke klares med JS?
Alternativt kunne jeg tænke mig en kalender, hvor man klikker på datoen i
rette måned.
Findes der 'færdige' moduler eller lignende til det?
Mvh Kurt
| |
Jens Peter Karlsen (13-02-2011)
| Kommentar Fra : Jens Peter Karlsen |
Dato : 13-02-11 00:57 |
|
Se inline:
On Sat, 12 Feb 2011 14:51:51 +0100, "Kurt G" <kurt_g@guldbaek.net>
wrote:
>Jeg vil gerne have det sådan, at den højeste dato afhænger af, hvilken
>måned, man har valgt!
>Det kan man, så vidt jeg ved, ikke med hverken ASP eller PHP, men kan det
>ikke klares med JS?
Det kan du let med alle tre. Uddrag månedens nummer (0-11) sammenlign
med et array du har lavet over dem der har 31 dage. Findes det ikke
der er der 30 dage medmindre det er Februar (1). For februar skal du
så lige regne på om det er skudår for at afgøre om der er 28 eller 29
dage i måneden. Husk også at hele århundreder ikke er skudår med
mindre de er delelige med 400. Dette kan du formentlig ignorere da det
ikke er videre sandsynligt at din side stadig findes om 89år.
>Alternativt kunne jeg tænke mig en kalender, hvor man klikker på datoen i
>rette måned.
>Findes der 'færdige' moduler eller lignende til det?
Ja. i alle tilfælde. Søg på Google efter Date picker ASP, JS eller
PHP.
| |
Kurt G (13-02-2011)
| Kommentar Fra : Kurt G |
Dato : 13-02-11 12:22 |
|
"Jens Peter Karlsen" <jpkarlsen@mvps.org> skrev i en meddelelse
news:pd6el61g3bui26ma2ud3g8svob4slr8us9@4ax.com...
> Se inline:
>
> On Sat, 12 Feb 2011 14:51:51 +0100, "Kurt G" <kurt_g@guldbaek.net>
> wrote:
>
>>Jeg vil gerne have det sådan, at den højeste dato afhænger af, hvilken
>>måned, man har valgt!
>>Det kan man, så vidt jeg ved, ikke med hverken ASP eller PHP, men kan det
>>ikke klares med JS?
>
> Det kan du let med alle tre. Uddrag månedens nummer (0-11) sammenlign
> med et array du har lavet over dem der har 31 dage. Findes det ikke
> der er der 30 dage medmindre det er Februar (1). For februar skal du
> så lige regne på om det er skudår for at afgøre om der er 28 eller 29
> dage i måneden. Husk også at hele århundreder ikke er skudår med
> mindre de er delelige med 400. Dette kan du formentlig ignorere da det
> ikke er videre sandsynligt at din side stadig findes om 89år.
>
KLIPPET
Så er der noget, som jeg har misforstået!
Hvis man ser på http://www.ikasthistorie.dk/NyeMoeder.asp, og der under
"Vælg måned" trykker sig frem til f.eks februar, så skal rullemenuen "Vælg
dato" jo begrænses til 28/29 dage. Det kræver jo, ved ASP og PHP, at
serveren bliver aktiveret!
Hvordan klares det?
Mvh Kurt
| |
Birger Sørensen (13-02-2011)
| Kommentar Fra : Birger Sørensen |
Dato : 13-02-11 12:42 |
|
Kurt G forklarede:
> "Jens Peter Karlsen" <jpkarlsen@mvps.org> skrev i en meddelelse
> news:pd6el61g3bui26ma2ud3g8svob4slr8us9@4ax.com...
>> Se inline:
>>
>> On Sat, 12 Feb 2011 14:51:51 +0100, "Kurt G" <kurt_g@guldbaek.net>
>> wrote:
>>
>>>Jeg vil gerne have det sådan, at den højeste dato afhænger af, hvilken
>>>måned, man har valgt!
>>>Det kan man, så vidt jeg ved, ikke med hverken ASP eller PHP, men kan det
>>>ikke klares med JS?
>>
>> Det kan du let med alle tre. Uddrag månedens nummer (0-11) sammenlign
>> med et array du har lavet over dem der har 31 dage. Findes det ikke
>> der er der 30 dage medmindre det er Februar (1). For februar skal du
>> så lige regne på om det er skudår for at afgøre om der er 28 eller 29
>> dage i måneden. Husk også at hele århundreder ikke er skudår med
>> mindre de er delelige med 400. Dette kan du formentlig ignorere da det
>> ikke er videre sandsynligt at din side stadig findes om 89år.
>>
> KLIPPET
> Så er der noget, som jeg har misforstået!
> Hvis man ser på http://www.ikasthistorie.dk/NyeMoeder.asp, og der under "Vælg
> måned" trykker sig frem til f.eks februar, så skal rullemenuen "Vælg dato" jo
> begrænses til 28/29 dage. Det kræver jo, ved ASP og PHP, at serveren bliver
> aktiveret!
> Hvordan klares det?
>
> Mvh Kurt
Hvis du vælger februar i dit link, kan du stadig vælge 31...
Så der foretages ingen check eller justeringer.
Man kan gøre det med JS, da det er en form. Hvis inkorporeret i en
side, hvor eksisterende aftaler allerede vises, kan man bruge AJAX.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
Kurt G (13-02-2011)
| Kommentar Fra : Kurt G |
Dato : 13-02-11 17:18 |
|
>> KLIPPET
>> Så er der noget, som jeg har misforstået!
>> Hvis man ser på http://www.ikasthistorie.dk/NyeMoeder.asp, og der under
>> "Vælg måned" trykker sig frem til f.eks februar, så skal rullemenuen
>> "Vælg dato" jo begrænses til 28/29 dage. Det kræver jo, ved ASP og PHP,
>> at serveren bliver aktiveret!
>> Hvordan klares det?
>>
>> Mvh Kurt
>
> Hvis du vælger februar i dit link, kan du stadig vælge 31...
> Så der foretages ingen check eller justeringer.
> Man kan gøre det med JS, da det er en form. Hvis inkorporeret i en side,
> hvor eksisterende aftaler allerede vises, kan man bruge AJAX.
>
> Birger
>
Men hvordan trigger jeg JS, når jeg har valgt en måned?
Mvh Kurt
| |
Birger Sørensen (13-02-2011)
| Kommentar Fra : Birger Sørensen |
Dato : 13-02-11 18:08 |
|
Kurt G forklarede:
>>> KLIPPET
>>> Så er der noget, som jeg har misforstået!
>>> Hvis man ser på http://www.ikasthistorie.dk/NyeMoeder.asp, og der under
>>> "Vælg måned" trykker sig frem til f.eks februar, så skal rullemenuen "Vælg
>>> dato" jo begrænses til 28/29 dage. Det kræver jo, ved ASP og PHP, at
>>> serveren bliver aktiveret!
>>> Hvordan klares det?
>>>
>>> Mvh Kurt
>>
>> Hvis du vælger februar i dit link, kan du stadig vælge 31...
>> Så der foretages ingen check eller justeringer.
>> Man kan gøre det med JS, da det er en form. Hvis inkorporeret i en side,
>> hvor eksisterende aftaler allerede vises, kan man bruge AJAX.
>>
>> Birger
>>
> Men hvordan trigger jeg JS, når jeg har valgt en måned?
> Mvh Kurt
<select onchange="JSfunktion(...)">
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
Kurt G (13-02-2011)
| Kommentar Fra : Kurt G |
Dato : 13-02-11 20:37 |
|
KLIPPET
>>> Hvis du vælger februar i dit link, kan du stadig vælge 31...
>>> Så der foretages ingen check eller justeringer.
>>> Man kan gøre det med JS, da det er en form. Hvis inkorporeret i en side,
>>> hvor eksisterende aftaler allerede vises, kan man bruge AJAX.
>>>
>>> Birger
>>>
>> Men hvordan trigger jeg JS, når jeg har valgt en måned?
>> Mvh Kurt
>
> <select onchange="JSfunktion(...)">
>
> Birger
Tak for tip!
Jeg skal vist til at læse noget på det der JS.
Mvh Kurt
| |
Ronny Olsen (14-02-2011)
| Kommentar Fra : Ronny Olsen |
Dato : 14-02-11 19:36 |
|
Hej Kurt,
som Birger så rigtigt skriver er AJAX en mulighed, men du kan gøre det
rent JS mæssigt.
<script type="text/javascript">
function isLeapYear(Year){
if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
return (true);
}
else {
return (false);
}
}
function Dage(md, Year){
return [31,(isLeapYear(Year) ? 29:28),31,30,31,30,31,31,30,31,30,31][md];
}
function JusterDage(md){
// http://www.javascriptkit.com/jsref/select.shtml
var daglisteelm = document.getElementById("dato");
var aarvalue = document.getElementById("Aar").value;
var dage = Dage(md-1, aarvalue);
//
http://www.satya-weblog.com/2008/08/javascript-remove-delete-select-option.html
// sletter nuvæerende liste
var lng = daglisteelm.options.length;
for(i=lng; i>=0; i--){
daglisteelm.remove(i);
}
// opretter listen med de nye værdier
for(i=1;i<=dage;i++){
daglisteelm.options[daglisteelm.length]=new Option(i, i);
}
}
</script>
<select size="1" name="maaned" onchange="JusterDage(this.value)">
demo http://olsensweb.dk/test/ng/selectboxdag.htm
--
Med Venlig Hilsen
Ronny Olsen
web: http://olsensweb.dk
| |
Birger Sørensen (14-02-2011)
| Kommentar Fra : Birger Sørensen |
Dato : 14-02-11 19:49 |
|
Ronny Olsen forklarede den 14-02-2011:
> Hej Kurt,
> som Birger så rigtigt skriver er AJAX en mulighed, men du kan gøre det rent
> JS mæssigt.
>
> <script type="text/javascript">
> function isLeapYear(Year){
> if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
> return (true);
> }
> else {
> return (false);
> }
> }
>
> function Dage(md, Year){
> return [31,(isLeapYear(Year) ? 29:28),31,30,31,30,31,31,30,31,30,31][md];
> }
>
> function JusterDage(md){
> // http://www.javascriptkit.com/jsref/select.shtml
> var daglisteelm = document.getElementById("dato");
> var aarvalue = document.getElementById("Aar").value;
> var dage = Dage(md-1, aarvalue);
>
> //
> http://www.satya-weblog.com/2008/08/javascript-remove-delete-select-option.html
> // sletter nuvæerende liste
> var lng = daglisteelm.options.length;
> for(i=lng; i>=0; i--){
> daglisteelm.remove(i);
> }
> // opretter listen med de nye værdier
> for(i=1;i<=dage;i++){
> daglisteelm.options[daglisteelm.length]=new Option(i, i);
> }
> }
> </script>
>
> <select size="1" name="maaned" onchange="JusterDage(this.value)">
>
> demo http://olsensweb.dk/test/ng/selectboxdag.htm
AJAX var nu mest tænkt som en muliged, hvis man ønsker eksisterende
afaler vist for en given måned - så man ikke taster en ny aftale på
samme dag en anden allerede eksisterer.
Hvis det er ligegyldigt, er der ingen grund til at bruge AJAX.
Ovnestående der fint nok ud.
Dog skal man lige være opmærksom på, at det vil udføre op til 62
gentegninger af skærmen - en for hver gang der fjernes/indsættes en
option. Afhængigt af hvad der er på skærmen, er det måske ikke
hensigtsmæssigt.
Man undgår det, ved at definere et document-fragment, som man arbejder
på, og indsætter når arbejdet er udført. Det vil kun give een
gentegning, og være hurtigere.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
Ronny Olsen (15-02-2011)
| Kommentar Fra : Ronny Olsen |
Dato : 15-02-11 00:04 |
|
Den 14-02-2011 19:49, Birger Sørensen skrev:
>Man undgår det, ved at definere et document-fragment, som man arbejder
på, og indsætter når arbejdet er udført.
Hej Birger,
har du nogle ide om hvorfor dette kun virker FØRSTE gang ??
som om siden er caschet
function JusterDage(md){
var fragment = document.createDocumentFragment();
var daglisteelm = document.getElementById("dato");
var aarvalue = document.getElementById("Aar").value;
var dage = Dage(md-1, aarvalue);
// virker kun første gang :(
var select = document.createElement('select');
for( var i = 1; i <= dage; i++ ) {
var option = document.createElement('option');
option.setAttribute("value",i);
var text = document.createTextNode(i);
option.appendChild(text);
select.appendChild(option);
}
fragment.appendChild(select);
daglisteelm.parentNode.replaceChild(fragment, daglisteelm);
}
jeg har ikke sat meta tags, kunne det være årsagen ??
--
Med Venlig Hilsen
Ronny Olsen
web: http://olsensweb.dk
| |
Birger Sørensen (15-02-2011)
| Kommentar Fra : Birger Sørensen |
Dato : 15-02-11 00:34 |
|
Ronny Olsen kom med denne ide:
> Den 14-02-2011 19:49, Birger Sørensen skrev:
> >Man undgår det, ved at definere et document-fragment, som man arbejder
> på, og indsætter når arbejdet er udført.
>
> Hej Birger,
>
> har du nogle ide om hvorfor dette kun virker FØRSTE gang ??
> som om siden er caschet
>
> function JusterDage(md){
> var fragment = document.createDocumentFragment();
> var daglisteelm = document.getElementById("dato");
> var aarvalue = document.getElementById("Aar").value;
> var dage = Dage(md-1, aarvalue);
>
> // virker kun første gang :(
> var select = document.createElement('select');
> for( var i = 1; i <= dage; i++ ) {
> var option = document.createElement('option');
> option.setAttribute("value",i);
> var text = document.createTextNode(i);
> option.appendChild(text);
> select.appendChild(option);
> }
> fragment.appendChild(select);
> daglisteelm.parentNode.replaceChild(fragment, daglisteelm);
> }
>
> jeg har ikke sat meta tags, kunne det være årsagen ??
meta skal vist ikke have indflydelse på scripts. Men det er en god ide
at sætte en mets der definerer default script.
Tror umiddelbart - uden at have nærlæst - problemet er, at du ikke
sætter id for den nye select.
Ved andet gennemløb, får du enten en fejl eller aglisteelm er null. Så
fejler din indsættelse sidst.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
Ronny Olsen (15-02-2011)
| Kommentar Fra : Ronny Olsen |
Dato : 15-02-11 00:54 |
|
Den 15-02-2011 00:34, Birger Sørensen skrev:
> Tror umiddelbart - uden at have nærlæst - problemet er, at du ikke
> sætter id for den nye select.
du har fuldstændigt ret
var select = document.createElement('select');
select.setAttribute("id", "dato"); <----- denne linje manglede
for( var i = 1; i <= dage; i++ ) {
demo opdateret
--
Med Venlig Hilsen
Ronny Olsen
web: http://olsensweb.dk
| |
Kurt G (14-02-2011)
| Kommentar Fra : Kurt G |
Dato : 14-02-11 22:55 |
|
"Ronny Olsen" <ng@olsensweb.dk> skrev i en meddelelse
news:4d597600$0$4039$9f626990@news.telelet.dk...
> Hej Kurt,
> som Birger så rigtigt skriver er AJAX en mulighed, men du kan gøre det
> rent JS mæssigt.
>
> <script type="text/javascript">
> function isLeapYear(Year){
> if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
> return (true);
> }
> else {
> return (false);
> }
> }
>
> function Dage(md, Year){
> return [31,(isLeapYear(Year) ? 29:28),31,30,31,30,31,31,30,31,30,31][md];
> }
>
> function JusterDage(md){
> // http://www.javascriptkit.com/jsref/select.shtml
> var daglisteelm = document.getElementById("dato");
> var aarvalue = document.getElementById("Aar").value;
> var dage = Dage(md-1, aarvalue);
>
> //
> http://www.satya-weblog.com/2008/08/javascript-remove-delete-select-option.html
> // sletter nuvæerende liste
> var lng = daglisteelm.options.length;
> for(i=lng; i>=0; i--){
> daglisteelm.remove(i);
> }
> // opretter listen med de nye værdier
> for(i=1;i<=dage;i++){
> daglisteelm.options[daglisteelm.length]=new Option(i, i); }
> }
> </script>
>
> <select size="1" name="maaned" onchange="JusterDage(this.value)">
>
> demo http://olsensweb.dk/test/ng/selectboxdag.htm
>
> --
> Med Venlig Hilsen
> Ronny Olsen
> web: http://olsensweb.dk
Det kan jeg ikke lige gennemskue på en studs!
Jeg vil se nærmere på det og vender nok tilbage!
Mvh Kurt
| |
Kurt G (14-02-2011)
| Kommentar Fra : Kurt G |
Dato : 14-02-11 23:10 |
|
KLIPPET
> demo http://olsensweb.dk/test/ng/selectboxdag.htm
>
> --
> Med Venlig Hilsen
> Ronny Olsen
> web: http://olsensweb.dk
Tak for demoen, der kan jeg se, hvordan man får det strikket sammen.
Men jeg har lige prøvet demoen, og den siger, at der er 28 dage i februar
2012!
Min lommekalender er ikke ening med den!
Det ligger nok 'i en lille ting'.
Mvh Kurt
| |
Kurt G (14-02-2011)
| Kommentar Fra : Kurt G |
Dato : 14-02-11 23:23 |
|
Det gør den ikke mere!
Underligt!
Mvh Kurt
"Kurt G" <kurt_g@guldbaek.net> skrev i en meddelelse
news:4d59a84c$0$23759$14726298@news.sunsite.dk...
> KLIPPET
>> demo http://olsensweb.dk/test/ng/selectboxdag.htm
>>
>> --
>> Med Venlig Hilsen
>> Ronny Olsen
>> web: http://olsensweb.dk
>
> Tak for demoen, der kan jeg se, hvordan man får det strikket sammen.
> Men jeg har lige prøvet demoen, og den siger, at der er 28 dage i februar
> 2012!
> Min lommekalender er ikke ening med den!
>
> Det ligger nok 'i en lille ting'.
>
> Mvh Kurt
>
| |
Ronny Olsen (14-02-2011)
| Kommentar Fra : Ronny Olsen |
Dato : 14-02-11 23:50 |
|
Den 14-02-2011 23:23, Kurt G skrev:
> Det gør den ikke mere!
> Underligt!
> Mvh Kurt
Hej Kurt,
der er IKKE ændret noget ennu, tænker lidt over det som Birger skrev her
19:49. (har ikke "leget" med document-fragment før)
mit bedste bud på fejlen er: du har valgt måned først og derefter år.
som det er nu SKAL man vælge år først og derefter måned, da jeg ikke har
sat nogle event på år
--
Med Venlig Hilsen
Ronny Olsen
web: http://olsensweb.dk
| |
Birger Sørensen (15-02-2011)
| Kommentar Fra : Birger Sørensen |
Dato : 15-02-11 00:38 |
|
Ronny Olsen formulerede spørgsmålet:
> Den 14-02-2011 23:23, Kurt G skrev:
>> Det gør den ikke mere!
>> Underligt!
>> Mvh Kurt
>
> Hej Kurt,
> der er IKKE ændret noget ennu, tænker lidt over det som Birger skrev her
> 19:49. (har ikke "leget" med document-fragment før)
> mit bedste bud på fejlen er: du har valgt måned først og derefter år.
> som det er nu SKAL man vælge år først og derefter måned, da jeg ikke har sat
> nogle event på år
Hvis du nu lader js-funktionen selv læse måneden fra elementet, som den
gør året, kan både måned og år bruge samme onchange....
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
| |
|
|