[php+ajax]radiobuttons undefined

Pagina: 1
Acties:

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
In een applicatie wordt bij een onchange van een tekstvak volgende code gegenereerd:

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
function createHTTPHandler(){
httphandler = false;

if (!httphandler && typeof XMLHttpRequest!='undefined') {
httphandler = new XMLHttpRequest();
}
return httphandler;
}
    
function updatepc(){
    
    var XMLHTTPObject = createHTTPHandler();
    XMLHTTPObject.open('GET', 'controleerpostcode.php?pc='+document.profiel.postcode.value, true);
    XMLHTTPObject.setRequestHeader("Cache-Control", "no-cache");
    XMLHTTPObject.setRequestHeader("X_USERAGENT", "controleerpostcode");
    XMLHTTPObject.send(null);
    
    XMLHTTPObject.onreadystatechange=function() {
    if (XMLHTTPObject.readyState==4) {
        terug = XMLHTTPObject.responseText;
    
                //popUp("selecteerpc.php?pc="+document.profiel.postcode.value+"",400,400);
                document.getElementById('meerpostcodes').innerHTML ="<fieldset><legend>Gevonden overeenkomsten<font class='fout'> <b>(Corrigeer indien nodig!)</b></font></legend><table>"+terug+"</table></fieldset>";
                
                
                stelin();
                            
        
    }
}

    
}
function stelin(){
    alert(document.profiel.keuzes.value);
    //document.profiel.pcinternnummer.value=document.forms['profiel'].elements['keuzes'].value; 
}


De onchange roept de functie upudatepc op welke vervolgens naar selecteerpc.php gaat, deze geeft als waarde een aantal gevonden records terug in de vorm van de rijen van een tabel:

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
<?php
    include("db_connect.php");
    //Deze file dient voor het controleren van de ingevoerde postcode en toont als het nodig is de gebruiker een popup waarin hij de juiste postcode kan kiezen
    //(in het geval er meermaals dezelfde pc voorkomt!)
    if(isset($_SERVER['HTTP_X_USERAGENT']) && $_SERVER['HTTP_X_USERAGENT'] =='controleerpostcode')
    {
        $postcode = addslashes($_GET['pc']);
        $query="SELECT * FROM postcodes WHERE code='".$postcode."'";
        $resultaat = mysql_query($query) or die(mysq_error());
        $terug="";
        $aantal =0;
        while($p = mysql_fetch_array($resultaat)){
            $aantal++;
            if($aantal ==1){
                $terug.="<tr><td><input type='radio' name='keuzes' value='TEST' onclick='stelin();'></td><td>".$p['Name']."</td></tr>";
            }else{
                $terug.="<tr><td><input type='radio' name='keuzes' value='TEST' onclick='stelin();'></td><td>".$p['Name']."</td></tr>";
            }
        }
        echo($terug);
        
    }
    else
    {
        echo("Deze pagina kan niet rechstreeks worden bekeken!");
    }
    
?>


Vervolgens wordt de stelin() functie opgeroepen om van de geselecteerde radiobutton de value terug te krijgen.

Er stelt zich nl een probleem, als de selecteerpc.php slechts 1 rij teruggeeft dan gaat alles goed en dan herkent hij de value, maar vanaf het moment er meer dan 1 rij wordt teruggegeven dan krijg ik als value steeds undefined terug..

Ik weet totaal niet wat er fout gaat, of wat ik fout doe, en ik hoop dat iemand me hier een beetje kan helpen.

Alvast bedankt!

Verwijderd

Na even testen geloof ik dat het niet mogelijk is om de value van een radiobutton group op die manier op te vragen is. Deze manier werkt wel:

JavaScript:
1
2
3
4
5
6
7
8
9
function stelin(){
//  alert(document.profiel.keuzes.value);

    for(var i = 0; i < document.profiel.keuzes.length; i++) {
        if(document.profiel.keuzes[i].checked) {
            alert(document.profiel.keuzes[i].value);
        }
    }
}

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Die manier die werkt wel, maar als ik nu die waarde in een variabele ga steken dan krijg ik dat

document.profiel.keuzes[i].value geen properties heeft;

dus

code:
1
2
3
...
var waarde = document.profiel.keuzes[i].value
...

Verwijderd

Dit werkt hier prima hoor:
JavaScript:
1
2
3
4
5
6
7
8
9
function stelin(){
    var waarde;
    for(var i = 0; i < document.profiel.keuzes.length; i++) {
        if(document.profiel.keuzes[i].checked) {
            waarde = document.profiel.keuzes[i].value
        }
    }
    alert(waarde);
}

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:56

crisp

Devver

Pixelated

joriswit: dat gaat juist weer mis als je maar 1 radiobutton hebt (wat vreemd zou zijn voor een dergelijke control, maar toch). Dit is een correcte aanpak:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function stelin()
{
    var radio = document.forms['profiel'].elements['keuzes'];
    if (!radio.length) radio = [radio]; // voor het geval er maar 1 is

    var i = radio.length, waarde;
    while (i--)
    {
        if (radio[i].checked)
        {
            waarde = radio[i].value;
            break;
        }
    }

    alert(waarde);
}


maar in dit geval zou ik gewoon dit doen in HTML:
HTML:
1
<input type='radio' name='keuzes' value='TEST' onclick='stelin(this.value);'>

[ Voor 4% gewijzigd door crisp op 04-03-2007 00:30 ]

Intentionally left blank