[PHP/JS] Lezen van dynamische SELECT menu

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 24-03 15:01

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik heb diverse javascript sites bekeken, maar wat ik kan zien is b.v.:
document.form.select.options[document.form.select.selectedIndex].value
als ik gekozen waarde uit select menu wil aflezen.

Nu maak ik een site dat dynamisch inhoud verandert. De select menu wordt helemaal vanuit het niets gebouwd (dus staat nog nergens in HTML) en wordt in ene <div id='searchresult'> </div> geplaatst via innerHTML commando. Dat werkt prima.
Maar gek genoeg kan ik niet waarde aflezen met bovenstaande commando, en firefox javascript-console geeft foutmelding aan:
document.mapform.npcid.options has no properties
Wat is dat nou weer..... :(

De onderstaande code staat tussen <form name='mapform'></form> deel.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<div class="tabcontent" id="editnpc">
<h3>EDIT NPC</h3>
<div style="background-color:#999999;">Search NPC:</div>
<div style="background-color:#DDDDDD; color:#000000;">
Name NPC: <input name="searchn" type="text" value="" size="20" autocomplete="off" onkeyup="searchnpc()" /><br />
Function: <select name="searchf" onchange="searchnpc()">
   <option value="0">-- search all --</option>
   <?
   // verzamel area data
   $sql=mysql_query("SELECT * FROM npcfunction ORDER BY nfunction");
   if (mysql_num_rows($sql))
    { while($data=mysql_fetch_array($sql))
        { 
        ?>
        <option value="<?=$data[nfid];?>"><?=$data[nfunction];?></option>
        <? }
    } ?></select><br /> 
Area: <select name="searcha" onchange="searchnpc()">
   <option value="0">-- search all --</option>
   <?
   // verzamel area data
   $sql=mysql_query("SELECT * FROM area,areatype WHERE area.atypeid=areatype.atid ORDER BY anaam ASC");
   if (mysql_num_rows($sql))
    { while($data=mysql_fetch_array($sql))
        { 
        ?>
        <option value="<? 
        echo $data[aid];?>"><?=$data[anaam]." (".$data[atnaam].") ";
        if ($data[amap]==1) { echo "F"; } else { echo "T"; }
        ?></option>
        <? }
    } ?></select></div> 
<div id="searchresult" style="background-color:#3366FF; position:absolute; padding:1px; display:block; border:#33CCFF 1px solid; margin-top:5px;">
<select name="npcid" onchange="editnpc()">
<option value="0">-- Search first --</option>
</select>
</div>
<div id="editnpcfield" style="position:relative; visibility:hidden;">
You may now edit the fields.<br />
   Name NPC: <input name="enaam" type="text" value="" size="35" /><br />
   Function:<br />
   <select name="efunction">
   <option value="0">-- please choose --</option>
   <?
   // verzamel area data
   $sql=mysql_query("SELECT * FROM npcfunction ORDER BY nfunction");
   if (mysql_num_rows($sql))
    { while($data=mysql_fetch_array($sql))
        { 
        ?>
        <option value="<?=$data[nfid];?>"><?=$data[nfunction];?></option>
        <? }
    } ?></select><br /> 
   Area:<br />
   <select name="earea">
   <?
   // verzamel area data
   $sql=mysql_query("SELECT * FROM area,areatype WHERE area.atypeid=areatype.atid AND area.amap='2'");
   if (mysql_num_rows($sql))
    { while($data=mysql_fetch_array($sql))
        { 
        ?>
        <option value="<?=$data[aid];?>"><?=$data[anaam]." (".$data[atnaam].")";?></option>
        <? }
    } ?></select><br /> 
   Description NPC:
   <textarea name="etekst" cols="30" rows="4" id="tekst"></textarea>
   <input name="npcid" type="hidden" value="" />
   <input name="nedit_editsubmit" value="Edit npc" type="submit" />
</div> 
</div>


Via javascript wordt een andere php file opgeroepen en deze deel wordt uitgevoerd
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sql=mysql_query("SELECT * FROM npc".$searchstring." ORDER BY nnaam ASC");
if (mysql_num_rows($sql))
    {
    $inhoud.="Found something. You can choose now.<br /><select name='npcid' onchange='editnpc()'>";
    $inhoud.="<option value='0'>-- select one --</option>";
    while($data=mysql_fetch_array($sql))
        {
        $sql2=mysql_query("SELECT area.anaam,areatype.atnaam FROM area,areatype WHERE area.aid='".$data[naid]."' AND area.atypeid=areatype.atid");
        list($anaam,$atnaam)=mysql_fetch_row($sql2);
        $sql2=mysql_query("SELECT nfunction FROM npcfunction WHERE nfid='".$data[nfunc]."'");
        list($nfunction)=mysql_fetch_row($sql2);
        $inhoud.="<option value='".$data[nid]."'>".$data[nnaam]." (".$nfunction.") at ".$anaam."</option>";
        }
    $inhoud.="</select>";
    }
    else
    {
    $inhoud.="Nothing found. Try again.";
    }

Zoals je kan zien maak ik nieuwe SELECT box aan, dat nog niet in bestaande HTML pagina staat.
Opmerkelijk detail is dat <div> op position:absolute; staat. Dat kan je dus overal plaatsen op pagina, ik hoop dat geen nare effect heeft op <form></form> velden.

Uit onderzoek is gebleken dat het geen verschil maakt als ik op position:relative; zet.

Een analyse met document.mapform.npcid.length (waar je aantal option velden kunt optellen) geeft afwijkende waarde aan. Er klopt niet. Het geeft altijd '2' aan.

Ik weet dat het wel mogelijk is om alsnog waarde eruit te halen wat geselecteerd is uit dynamisch aangemaakte select menu, maar welke commando's en codes zijn hiervoor nodig?
Ik heb rest van de site wel aan praat gekregen, maar dit is enige dat nog niet goed loopt.

Je mag het zeggen hoe ik ga aanpakken, en wat ik moet opletten en welke mogelijke codes zijn hiervoor nodig?

Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 24-03 15:01

MrDummy

Nog steeds gek op anime...

Topicstarter
Noot aan moderator: waarom het naar Programming is gemoved weet ik niet, maar ik weet dat het client-side probleem is: de aflezen van SELECT menu waarde met JavaScript. Omdat JS clientside programmeertaal is, vraag ik me af waarom hier komt te staan.... 8)7 De PHP gedeelte werkt prima en daar hoef ik geen hulp voor hebben. :X
Bovendien ben ik al meer vertrouwd met PHP taal, maar Javascript coderen ben ik nog maar net mee begonnen en nog lerend....

Ik wacht wel op een mogelijke antwoord of en tip.... :)


====
EDIT: Eindelijk heb ik aan praat gekregen. De codewoord 'this' doet het werk :o , dus in onchange="editnpc(this)" wordt de box waarde doorgegeven naar function editnpc(whichbox) { ... } en de rest is dan fluitje van een cent. Dat is nog een zomg...

Vraag me wel eigenlijk af welke boxwaarde eigenlijk is.

[ Voor 23% gewijzigd door MrDummy op 18-10-2006 00:20 ]