Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:26 Der er 30 kommentarer og
1 løsning

Første gruppe selects skal være størrere end anden gruppe selects

Hej Eksperter :]

Jeg har en form hvor man skal indtaste en dato, og et start og slut tidspunkt...

tidspunktet består af 2*2 selectbokse således jeg både har timer og minutter...

Mit problem er at jeg validere disse selectbokse for at sikre mig at man ikke vælge et sluttidspunkt som er før starttidspunktet, og dette giver mig problemmer!

Det virker fint hvis man vælger tidspunkte som begge har 2 cifrede timer som fx: 13:30->17:50, men hvis man vælge 5:10->14:40 så siger den at starttidspunktet skal være før sluttidspunktet... Det bliver værrere hvis man fx vælge fra 21:20->8:20 så finder den ingen fejl og sender formen..

Så vidt jeg kan se er problemmet at den kun "ser" det første tegn i tallet...


Min kode er som følgende:

function tjek_aktivitet(f) {   
    if (f.opret_opgave.value=='' && f.opret_opgave1.value=='') {
        alert('Du skal skrive en besked');
        showdiv('opret_opgave');
        return false
    }
    else {
        if (isskudar(f.opret_fra_dato.value,f.opret_fra_maned.value,f.opret_fra_ar.value) == true) {
            if (f.opret_til_time.value<f.opret_fra_time.value) {
                alert("Start-tidspunktet skal være før slut-tidspunktet!");
                showdiv("opret_opgave");
                f.opret_opgave1.value=f.opret_opgave.value;
                return false
            }
            else if (f.opret_fra_time.value==f.opret_til_time.value&&f.opret_til_min.selectedIndex<f.opret_fra_min.selectedIndex) {
                alert("Start-tidspunktet skal være før slut-tidspunktet!");
                f.opret_opgave1.value=f.opret_opgave.value;
                showdiv("opret_opgave");
                return false   
            }
            else {
                alert("Opretter aktivitet på " + f.opret_bruger.value + "s kalender");
                return true;
            }
        }
        else {
            showdiv("opret_opgave");
            f.opret_opgave1.value=f.opret_opgave.value;
            return false;
        }
    }   
}





<form name='opret' method='post' action='set/aktivitet.php?kal_maned=12&kal_ar=2003&kal_dato=16' target='skjult_aktivitet' onSubmit='return tjek_aktivitet(this)'>
<div id='opret_opgave' style='position:absolute;left:150px;top:100px;display:none'>
<a name='x'>
<table width='500' border='0' align='center' cellpadding='0' cellspacing='20' style='border: 1px groove #7A7A7A; background:#E9F3F8'>
    <tr>
        <td>
            <div style='text-align:left;font-family: Verdana;font-size:16px'><b>Opret aktivitet</b></div>
            Bruger<br>
            <select name='opret_bruger' class='form_select'>
                <option value='Viggo' SELECTED>Viggo</option>
                <option value='Hans'>Hans</option>
                <option value='Jørgen'>Jørgen</option>
            </select>
            <br><br>
            Fra<br>
            <select name='opret_fra_dato' class='form_select'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='11'>11</option><option value='12'>12</option><option value='13'>13</option><option value='14'>14</option><option value='15'>15</option><option value='16' SELECTED>16</option><option value='17'>17</option><option value='18'>18</option><option value='19'>19</option><option value='20'>20</option><option value='21'>21</option><option value='22'>22</option><option value='23'>23</option><option value='24'>24</option><option value='25'>25</option><option value='26'>26</option><option value='27'>27</option><option value='28'>28</option><option value='29'>29</option><option value='30'>30</option><option value='31'>31</option></select> /
            <select name='opret_fra_maned' class='form_select'><option value='1'>1</option><option value='2'>2</option><option value='3'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='11'>11</option><option value='12' SELECTED>12</option></select>
            <select name='opret_fra_ar' class='form_select'><option value='2003' SELECTED>2003</option><option value='2004'>2004</option><option value='2005'>2005</option><option value='2006'>2006</option><option value='2007'>2007</option><option value='2008'>2008</option><option value='2009'>2009</option><option value='2010'>2010</option><option value='2011'>2011</option><option value='2012'>2012</option><option value='2013'>2013</option><option value='2014'>2014</option><option value='2015'>2015</option><option value='2016'>2016</option><option value='2017'>2017</option><option value='2018'>2018</option><option value='2019'>2019</option><option value='2020'>2020</option><option value='2021'>2021</option><option value='2022'>2022</option><option value='2023'>2023</option><option value='2024'>2024</option><option value='2025'>2025</option><option value='2026'>2026</option><option value='2027'>2027</option><option value='2028'>2028</option><option value='2029'>2029</option><option value='2030'>2030</option><option value='2031'>2031</option><option value='2032'>2032</option><option value='2033'>2033</option><option value='2034'>2034</option><option value='2035'>2035</option></select>

            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kl.&nbsp;
            <select name='opret_fra_time' class='form_select'><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='11'>11</option><option value='12'>12</option><option value='13' SELECTED>13</option><option value='14'>14</option><option value='15'>15</option><option value='16'>16</option><option value='17'>17</option><option value='18'>18</option><option value='19'>19</option><option value='20'>20</option><option value='21'>21</option><option value='22'>22</option><option value='23'>23</option></select> :
            <select name='opret_fra_min' class='form_select'><option value='00'>00</option><option value='05'>05</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option><option value='45'>45</option><option value='50'>50</option><option value='55'>55</option></select>

            <b>&nbsp;»&nbsp;</b>
       
            <select name='opret_til_time' class='form_select'><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='11'>11</option><option value='12'>12</option><option value='13' SELECTED>13</option><option value='14'>14</option><option value='15'>15</option><option value='16'>16</option><option value='17'>17</option><option value='18'>18</option><option value='19'>19</option><option value='20'>20</option><option value='21'>21</option><option value='22'>22</option><option value='23'>23</option></select> :
            <select name='opret_til_min' class='form_select'><option value='00'>00</option><option value='05'>05</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option><option value='45'>45</option><option value='50'>50</option><option value='55'>55</option></select>

            <br><br>
            Opgave<br>
            <textarea name='opret_opgave1' rows='10' class='form_boks' style='width:90%' cols='6'></textarea><br>
            <div style='text-align:center'>
                <input type='submit' name='submit' value='[ opret opgave ]' class='form_knap' style='width:40%' onClick='document.opret.opret_opgave.value=document.opret.opret_opgave1.value;document.opret.opret_opgave1.value="";showdiv("opret_opgave")'>
                <input type='reset' name='reset' value='[ luk vindue ]' class='form_knap' style='width:40%' onClick='showdiv("opret_opgave");return false'>
            </div>   
        </td>
    </tr>
</table>
</div>   
<textarea name='opret_opgave' rows='0' class='form_boks' style='width:0px;height:0px' cols='0'></textarea>                       
</form>

Håber der er nogen der kan se hvad jeg skal gøre! På forhånd mange tak :]
Avatar billede erikjacobsen Ekspert
16. december 2003 - 13:30 #1
Du kan fx skrive dine values med value='03', så virker sammenligningen.
Problemet er at det er tekstfelter, der sammenlignes som tekster og ikke
som tal.
Alternativt kan du lave dem om til tal i scriptet, men ovenstående er
umiddelbart nemmere.
Avatar billede roenving Novice
16. december 2003 - 13:32 #2
function replaceTime(val){
reg = /^(\d\:\d\d)$/;
val = val.replace(reg,"0\$1");
alert(val);
}
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:33 #3
jeg kan ikke lave dem om til 03 osv da det vil give meget om programmering i et større php-script, så hvis det er muligt at lave noget med javascript som virker ordenligt vil det klart være at foretrække!
Avatar billede roenving Novice
16. december 2003 - 13:34 #4
Hvis du nu omdøber funktionen til f.eks. rT bliver det til:

        if (isskudar(f.opret_fra_dato.value,f.opret_fra_maned.value,f.opret_fra_ar.value) == true) {
            if (rT(f.opret_til_time.value)<rT(f.opret_fra_time.value)) {
                alert("Start-tidspunktet skal være før slut-tidspunktet!");
                showdiv("opret_opgave");
                f.opret_opgave1.value=f.opret_opgave.value;
                return false
            }
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:34 #5
den skal jeg lige have lidt forklaring evt eksempel på roenving... Desværre ikke en vildere js-haj... kunne ellers være fedt! ;]

men ved ikk om du kan huske nogle af mine gamle javascripts-spørgsmål som jeg ved du hjalp mig med hver gang kan du vel se at jeg så småt er ved at komme videre ;)
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:35 #6
sætter functionen et 0 ind foran hvis de kun er et cifret?
Avatar billede erikjacobsen Ekspert
16. december 2003 - 13:35 #7
Det gør vel ikke nogen forskel i PHP-scriptet?

Men ellers skal/kan du bare

  if (parseInt(....denene...)<parseInt(...denanden...)) { .....
Avatar billede mm12010 Nybegynder
16. december 2003 - 13:35 #8
Avatar billede roenving Novice
16. december 2003 - 13:35 #9
-- og så skal funktionen være:

function replaceTime(val){
reg = /^(\d\:\d\d)$/;
return val.replace(reg,"0\$1");
}
Avatar billede roenving Novice
16. december 2003 - 13:36 #10
>>13:35:29

Præcis !-)
Avatar billede roenving Novice
16. december 2003 - 13:37 #11
function rT(val){
reg = /^(\d\:\d\d)$/;
return val.replace(reg,"0\$1");
}
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:44 #12
ehmn man kan stadig oprette noget man ikke skal ku!
har jeg sat det rigtigt ind?

function rT(val) {
    reg = /^(\d\:\d\d)$/;
    return val.replace(reg,'0$1');
}

function tjek_aktivitet(f) {   
    if (f.opret_opgave.value=='' && f.opret_opgave1.value=='') {
        alert('Du skal skrive en besked');
        showdiv('opret_opgave');
        return false
    }
    else {
        if (isskudar(f.opret_fra_dato.value,f.opret_fra_maned.value,f.opret_fra_ar.value) == true) {
            if (rT(f.opret_til_time.value)<rT(f.opret_fra_time.value)) {
                alert("Start-tidspunktet skal være før slut-tidspunktet!");
                showdiv("opret_opgave");
                f.opret_opgave1.value=f.opret_opgave.value;
                return false
            }
            else if (f.opret_fra_time.value==f.opret_til_time.value&&rT(f.opret_til_min.value)<rT(f.opret_fra_min.value)) {
                alert("Start-tidspunktet skal være før slut-tidspunktet!");
                f.opret_opgave1.value=f.opret_opgave.value;
                showdiv("opret_opgave");
                return false   
            }
            else {
                alert("Opretter aktivitet på " + f.opret_bruger.value + "s kalender");
                return true;
            }
        }
        else {
            showdiv("opret_opgave");
            f.opret_opgave1.value=f.opret_opgave.value;
            return false;
        }
    }   
}
Avatar billede erikjacobsen Ekspert
16. december 2003 - 13:46 #13
Du har ikke overvejet bare

        if (parseInt(f.opret_til_time.value)<parseInt(f.opret_fra_time.value)) {

og tilsvarende ved den næste
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:48 #14
jo hvis den virker på samme måde? men hvad gør den?
Avatar billede roenving Novice
16. december 2003 - 13:48 #15
else if (f.opret_fra_time.value==f.opret_til_time.value||rT(f.opret_til_min.value)<rT(f.opret_fra_min.value)) {
Avatar billede roenving Novice
16. december 2003 - 13:49 #16
erik, den tager jo ikke højde for det, som er efter :'et ...
Avatar billede erikjacobsen Ekspert
16. december 2003 - 13:50 #17
Hvor står det ":", roenving?
Avatar billede roenving Novice
16. december 2003 - 13:52 #18
I 4. afsnit af spørgsmålet ...

-- og jeg havde ikke kigget efter i elskermads kode !-|
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:53 #19
roenving din kommentar 13:48:26: den if skal kun træde i kraft hvis timen er det samme men min gør vrøvl.. man kan jo fx godt forestille sig at min er lavere hvis timen bare er højere. hvis jeg ellers har formuleret mig så det er til at forstå
Avatar billede roenving Novice
16. december 2003 - 13:53 #20
For så er det klart nemmere ikke at oprette en funktion, som forøvrigt så skal se sådan ud:

function rT(val){
return val.replace(/^(\d)$/,"0\$1");
}
Avatar billede roenving Novice
16. december 2003 - 13:54 #21
Ja, fordi jeg ikke havde kigget nærmere i din kode, havde jeg ikke opdaget, at du havde to forskellige select-boxe til timer og minutter !-)
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 13:55 #22
argh det er min fejl så (se jeg kan ikk formulere mig) tidspunktet 12:30 er bygget op af 2 selectbokse, en der styre time og en der styre minutter...
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 14:01 #23
det ser ud til at erikjacobsens ide virkede.. men hvordan virker den?
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 14:02 #24
.. og læg lidt et svar :]
Avatar billede roenving Novice
16. december 2003 - 14:03 #25
parseInt laver en tekst om til et tal, hvis den kan (og læser kun indtil, der kommer noget ikke-tal !-)
Avatar billede elskermad.dk Nybegynder
16. december 2003 - 14:07 #26
okay smart, og det gør vel ikke nogen forskel i det videre forløb at den er lavet til et tal?

du ligger os li et svar roenving :)
Avatar billede erikjacobsen Ekspert
16. december 2003 - 14:08 #27
Den "laver ikke teksten om til et tal" som sådan, men i sammenligningsudtrykket
laves den om til et tal med henblik på sammenligningen.
Avatar billede elskermad.dk Nybegynder
23. december 2003 - 20:48 #28
vil I ikke have points?
Avatar billede erikjacobsen Ekspert
23. december 2003 - 23:47 #29
Nej, tak, de to små forslag jeg kom med synes jeg ikke er 60 p værd. Jeg frafalder.
Avatar billede elskermad.dk Nybegynder
24. december 2003 - 00:18 #30
det var ellers det svar der skulle til, det gjorde at mit problem blev løst! :)
jeg vil meget gerne give dig nogen points så kan selv lægge et svar og ta halvdelen også får du resten?
Avatar billede elskermad.dk Nybegynder
28. december 2003 - 01:00 #31
det tager jeg som et nej til at du vil ha points!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester