Avatar billede skrogager Nybegynder
21. oktober 2004 - 21:24 Der er 11 kommentarer og
1 løsning

Autoselect af option i <select>

Hej, jeg skal bruge lidt hjælp... jeg sidder og bakser med at få selected en option i en <select> automatisk, baseret på et nr der står i en mysql database...
hvad jeg har nu, er et script der bl.a. fylder to select bokse, hvorefter select nr. 2 skal sættes til den entry nr. 1 referere til i databasen... jeg har en funktion jeg køre via onChange i nr. 1, der har jeg så en if-else, der afgøre om den pågældende option skal være selected, det eneste jeg mangler er en funktion der kan markere den pågældende option som selected....


min funktion ser sådan ud:

function select_kunde(pid, mid, selected) {
// mid er lig selectbox nr. 1's value...
// pid er id'et på select nr. 2...
// selected er det id select nr. 1 refererer til...

    if (document.getElementById(pid).value == "NULL")
        document.getElementById(pid).options.length=1;  //reset projekt select...
    else
        document.getElementById(pid).options.length=0;  //reset projekt select...

    for (var i = 0; i <= array_count; i ++) {
        if (kundenr[i] == mid) {
            if (pnr[i] == selected) {
                document.getElementById(pid).options[document.getElementById(pid).options.length] = new Option(beskrivelse[i].substr(0,28), pnr[i]);
            } else
                document.getElementById(pid).options[document.getElementById(pid).options.length] = new Option(beskrivelse[i].substr(0,28), pnr[i]);
        }
    }
}
Avatar billede roenving Novice
21. oktober 2004 - 21:39 #1
function select_kunde(pid, mid, selected) {
// mid er lig selectbox nr. 1's value...
// pid er id'et på select nr. 2...
// selected er det id select nr. 1 refererer til...

    var sel = document.getElementById(pid);
    if (sel.value == "NULL")
        sel.options.length=1;  //reset projekt select...
    else
        sel.options.length=0;  //reset projekt select...

    for (var i = 0; i <= array_count; i ++) {
        if (kundenr[i] == mid) {
            sel.options[sel.length] = new Option(beskrivelse[i].substr(0,28), pnr[i]);
            if (pnr[i] == selected)
                sel.options[sel.length-1].selected = true;
        }
    }
}

-- og er det rigtigt, at array_count-variablen indeholder et tal, som er en mindre end antallet ?-)
Avatar billede roenving Novice
21. oktober 2004 - 21:41 #2
-- og medmindre du har brug for at tage højde for decideret forældede browsere, er .options kun nødvendig i oprettelses-linjen !-)
Avatar billede skrogager Nybegynder
21. oktober 2004 - 22:18 #3
Tak for svaret! :)
Det virkede!

btw... array_count er lig antallet... ikke 1 mindre...
Avatar billede skrogager Nybegynder
21. oktober 2004 - 22:23 #4
ææææææh... hvordan virker det her point system? har jeg lige givet mig selv 100 point?? :-/
Avatar billede roenving Novice
21. oktober 2004 - 22:29 #5
Tjah, det har du nok, for du kan kun uddele point til dem som har svaret (og markeret !-), og der var kun dig selv ...

Men så vil der jo være en for mange, så du nok skal:

    for (var i = 0; i < array_count; i ++) {

-- og så kan det være, at du skulle kigge i faq'en: http://expfaq.1go.dk !o]
Avatar billede skrogager Nybegynder
21. oktober 2004 - 22:44 #6
hmm... wierd... bør man kunne give sig selv point? så er det da ingen sag at få top score :-/

anyways... hvis jeg gør:
for (var i = 0; i < array_count; i ++) {
vil der jo være een for lidt i den sidste ende... da array_count er lig antallet... så hvis antallet er 6 (+ 0 = 7) vil nr. 6 ikke blive kørt igennem, idet 6 ikke er mindre end 6... :)
Avatar billede roenving Novice
21. oktober 2004 - 22:49 #7
Nej, for hvis du har 6 elementer i et array, vil de være nummereret 0, 1, 2, 3, 4 og 5 !-)
Avatar billede olebole Juniormester
21. oktober 2004 - 22:50 #8
<ole>

skrogager >> Hvis du giver 100 points ud og tager 100 points tilbage - hvormange flere points har du så i forhold til før, du gav points ud?  ;o)

/mvh
</bole>
Avatar billede roenving Novice
21. oktober 2004 - 22:50 #9
-- ellers gør du jo brug af et tomt element, nemlig element[6] ...
Avatar billede skrogager Nybegynder
22. oktober 2004 - 09:48 #10
olebole: doh, tænkte ikke så langt :)

roenvig: nej, array_count er stadig lig antallet af entries fra 0 - N...
ikke fra 1 - N... :)


sådan ser koden ud:
/*************************************************************/

<?php
$count = 0;
$sql = @mysql_query("SELECT projekter.kundenr, projekter.projekt_nr, projekter.beskrivelse FROM projekter WHERE projekter.slut_dato > CURDATE()") or die("--></script><strong>MySQL forespørgslen kunne ikke udføres!</strong><br><br>" . mysql_error() . '<p id="bottom" class="main_control"></p>');
    while ($row = mysql_fetch_array($sql)) { ?>
        kundenr[<?php echo $count; ?>] = <?php echo $row['kundenr'] ?>;
        pnr[<?php echo $count; ?>] = <?php echo $row['projekt_nr'] ?>;
        beskrivelse[<?php echo $count; ?>] = "<?php echo substr($row['beskrivelse'],0,40) ?>";
        <?php $count ++;
    }
?>

array_count = <?php echo $count; ?>;

/*************************************************************/
Avatar billede skrogager Nybegynder
22. oktober 2004 - 13:05 #11
næææææhh... det kan egentlig godt være du har ret... $count vil jo blive incremented en ekstra gang til sidst... :)
Avatar billede roenving Novice
22. oktober 2004 - 13:54 #12
Jeg regner med at php på dette område har det præcist som javascript, derfor skrev jeg som jeg gjorde @ 21/10-2004 22:49:28 ...

-- så hvis du laver et array på 6 elementer, vil array[6] være undefined !-)

-- men du kan gøre det lidt lettere for dig selv, ved at:

<?php
$sql = @mysql_query("SELECT projekter.kundenr, projekter.projekt_nr, projekter.beskrivelse FROM projekter WHERE projekter.slut_dato > CURDATE()") or die("--></script><strong>MySQL forespørgslen kunne ikke udføres!</strong><br><br>" . mysql_error() . '<p id="bottom" class="main_control"></p>');
    while ($row = mysql_fetch_array($sql)) { ?>
        kundenr[kundenr.length] = <?php echo $row['kundenr'] ?>;
        pnr[pnr.length] = <?php echo $row['projekt_nr'] ?>;
        beskrivelse[beskrivelse.length] = "<?php echo substr($row['beskrivelse'],0,40) ?>";
        <?php
    }
?>

-- og så rette linjerne midt i js-koden til:

    for (var i = 0; i < pnr.length; i ++) {
        if (kundenr[i] == mid) {
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