Toon posts:

Twee selects met data; rechter data vanaf linkse datum

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi :*)

Ik heb dus twee select boxen gevuld met data. Vanaf vandaag met 366 dagen.

Wanneer bij de linker een datum wordt geselecteerd moet de rechter select vanaf díe datum beginnen met de aanwezige opties. Ik heb daarvoor een code die werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <script language="javascript">
      datum_array = new Array();
      <?=$javascript_date_array;?>
      var j = 0;
      var to_update = "";
      function update_eind_datum (current,to_update){
        document.forms['form'].elements[to_update].length = 0;
        j = 0;
        i = 0;
        for (i; i < datum_array.length; i++){
          if (document.forms['form'].elements[current].value <= datum_array[i].value){
            document.forms['form'].elements[to_update].options[j] = datum_array[i];
            j++;
          }
        }
        document.forms['form'].elements[to_update].disabled = false;
      }
    </script>

Deze werkt dus perfect bij de actie onChange --> update_eind_datum ('select_optioneel_start[1]','select_optioneel_eind[1]'). Nou is het alleen zo dat waneer ik dezelfde code gebruik bij de tweede select box onChange: update_eind_datum('select_verplicht_start[1]','select_verplicht_eind[1]')
gaat het script raar doen.

Wanneer bij selectbox 'select_optioneel_start[1]' een datum wordt geselecteer die lager is dan 'select_verplicht_start[1]' dan komen er bij de tweede select box 'select_verplicht_eind[1]' geen opties meer te staan.... :S

Nou had ik daarvoor een omweg bedacht... misschien dat het een probleem met datum vergelijking was ofzo.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    <script language="javascript">
      datum_array = new Array();
      <?=$javascript_date_array;?>
      var j = 0;
      var to_update = "";
      var start_datum = false;
      function update_eind_datum (current,to_update){
        document.forms['form'].elements[to_update].length = 0;
        j = 0;
        i = 0;
        start_datum = false;
        for (i; i < datum_array.length; i++){
          if (document.forms['form'].elements[current].value == datum_array[i].value){
            start_datum = true;
            alert (document.forms['form'].elements[current].value);
          }
          if (start_datum){
            document.forms['form'].elements[to_update].options[j] = datum_array[i];
            j++;
          }
        }
        document.forms['form'].elements[to_update].disabled = false;
      }
    </script>

Werkt ook goed bij één selectbox. Als ik het scenario van twee selectboxen neem dan krijg ik in de tweede select box 'select_verplicht_eind[1]' alleen de datums die tussen 'select_optioneel_start[1]' en 'select_verplicht_begin[1]' inliggen :S

Duss..... als een van jullie een oplossing heeft hoor ik die graag :+

[ Voor 15% gewijzigd door Verwijderd op 10-02-2005 17:16 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Voorbeelden zeggen meer dan duizend woorden. Dit is daar een goed voorbeeld van en ik ga daar dus niet veel woorden aan vuil maken :P Kan je even een voorbeeldje online zetten?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
hehehe.... tuuuurlijk. vanavond na me werk :)

Had snel ff een vraag gepost voordat ik weg ging :+ 8)7

Verwijderd

Topicstarter
Wordt er echt helemaal gestoord van :(

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:48

Janoz

Moderator Devschuur®

!litemod

Als ik er zo naar kijk is het enige dat ik me kan bedenken dat je dezelfde option objecten gebruikt in meerdere selects. Waarschijnlijk reageert de browser (ik zie het hier in firefox ook) niet zo goed op het vaker gebruiken van meerdere objecten en het overschrijven van objecten die ergens anders ook gebruikt worden.

Probeer het script eens te herschrijven zodat je niet een array met option objecten hebt, maar een array met een eigen structs of claas, of twee arrays met in de ene de meegstuurde value en in de andere de afgebeelde value. Het option object maak je dan pas aan in het lusje waarin je de select vult.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op vrijdag 11 februari 2005 @ 08:22:
Als ik er zo naar kijk is het enige dat ik me kan bedenken dat je dezelfde option objecten gebruikt in meerdere selects. Waarschijnlijk reageert de browser (ik zie het hier in firefox ook) niet zo goed op het vaker gebruiken van meerdere objecten en het overschrijven van objecten die ergens anders ook gebruikt worden.

Probeer het script eens te herschrijven zodat je niet een array met option objecten hebt, maar een array met een eigen structs of claas, of twee arrays met in de ene de meegstuurde value en in de andere de afgebeelde value. Het option object maak je dan pas aan in het lusje waarin je de select vult.
Zou je misschien een klein voorbeeldje kunnen geven?

Heb ook met andere namen geprobeert.... bijvooreeld: select_optioneel_start_1 i.p.v. select_optioneel_start[1] maar dat mocht ook niet baten.

  • gsteen
  • Registratie: November 2004
  • Laatst online: 13-01-2020
Als je wel een array met option objecten wil houden, dan zou ik deze niet direct aan je select
object toekennen zoals je nu doet:
JavaScript:
1
document.forms['form'].elements[to_update].options[j] = datum_array[i];

In plaats van "datum_array[i]" toekennen zou je een nieuw option object moeten maken. (Zei Janoz ook al)
Janoz schreef op vrijdag 11 februari 2005 @ 08:22:Het option object maak je dan pas aan in het lusje waarin je de select vult.
En de waarden "text" en "value" uit je option object array gebruiken. "datum_array[i].text" en "datum_array[i].value" dus.

"In theory, there is no difference between theory and practice. But, in practice, there is."


Verwijderd

Topicstarter
Aha..... dus pas in de for loop de options aanmaken? Ik zal het es ff gaan proberen zo :)

Ik zie er overigens geen erg in waardoor mijn manier niet goed zou kunnen werken

Verwijderd

Topicstarter
_/-\o_ aan iedereen

Mijn code hieronder :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    <script language="javascript">
      datum_array = new Array();
      <?=$javascript_date_array;?>
      var j = 0;
      var to_update = "";
      function update_eind_datum (current,to_update){
        document.forms['form'].elements[to_update].length = 0;
        j = 0;
        i = 0;
        alert (datum_array[1][1]);
        for (i; i < datum_array.length; i++){
          if (document.forms['form'].elements[current].value <= datum_array[i][1]){
            document.forms['form'].elements[to_update].options[j] = new Option(datum_array[i][0],datum_array[i][1]);
            j++;
          }
        }
        document.forms['form'].elements[to_update].selectedIndex = 0;
        document.forms['form'].elements[to_update].disabled = false;
      }
    </script>


Hierboven hoort een stukje php code:
PHP:
1
2
3
4
5
6
7
8
9
  for ($i = 0; $i <= 365; $i++){
    $timestamp = strtotime ("+" . $i . " day");
    $periodes_array .= "<option value=\"" . date('Y-m-d',$timestamp) . "\">" . date('d M Y',$timestamp) . "</option>\n";
    $javascript_date_array .= "
      datum_array[" . $i . "] = new Array ();
      datum_array[" . $i . "][0] = '" . date('d M Y',$timestamp) . "';
      datum_array[" . $i . "][1] = '" . date('Y-m-d',$timestamp) . "';\n
    ";
  }
Pagina: 1