onChange rij toevoegen met options
Ik heb het volgende tot nu toe
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
echo '
<select name="idKlant" onChange="contacten(';
$query = mysql_query("SELECT idKlant FROM klant");
while ($row = mysql_fetch_row($query)) { echo $row[0]; }
echo ')">
<option value="nieuw">Nieuwe Klant</option> ';
$query = mysql_query("SELECT idKlant,Naam FROM klant");
while ($row = mysql_fetch_row($query))
{
echo "<option value='".$row[0]."'>".$row[1]."</option>";
}
echo '
</select>
</td>
</tr>
<div id="contact">
</div>
?>
echo '
<select name="idKlant" onChange="contacten(';
$query = mysql_query("SELECT idKlant FROM klant");
while ($row = mysql_fetch_row($query)) { echo $row[0]; }
echo ')">
<option value="nieuw">Nieuwe Klant</option> ';
$query = mysql_query("SELECT idKlant,Naam FROM klant");
while ($row = mysql_fetch_row($query))
{
echo "<option value='".$row[0]."'>".$row[1]."</option>";
}
echo '
</select>
</td>
</tr>
<div id="contact">
</div>
?>
bij de onChange van die <select> hoort de volgende functie
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script language="javascript" type="text/javascript">
function contacten(str)
{
$query = mysql_query("SELECT * FROM contactpersonen WHERE idKlant='".str."'");
while ($code .= "<option value='".$row[0]."'>"$row[2]"</option>";)
document.getElementById('contact').innerHTML = "<tr>
<td>
Contactpersoon:
</td>
<td>
<select name='Contactpersoon'>
$code
</select>
</td>
</tr> ";
}
</script>
function contacten(str)
{
$query = mysql_query("SELECT * FROM contactpersonen WHERE idKlant='".str."'");
while ($code .= "<option value='".$row[0]."'>"$row[2]"</option>";)
document.getElementById('contact').innerHTML = "<tr>
<td>
Contactpersoon:
</td>
<td>
<select name='Contactpersoon'>
$code
</select>
</td>
</tr> ";
}
</script>
Ik heb al eerder gezegd dat ik geen javascript ken (althans heeeel erg slecht).
Wat ik probeer te bereiken is dat als ik een keuze maak uit de <select> dat eronder in <div> een regel erbij komt die alle contactpersonen laat zien van die bepaalde klant.
Kan iemand mij op een mogelijke fout wijzen wat ik fout doe of is alles wat ik heb gedaan gewoon volledig verkeerd?
Gewijzigd op 06/06/2012 11:26:02 door Albert de Wit
Je bent helemaal verkeerd bezig :). Als je een query wilt uitvoeren zul je onchange moeten posten of met AJAX gaan werken :). Een makkelijke manier om met Ajax te starten is bijvoorbeeld Jquery, die ook redelijk heldere documentatie hebben in mijn ogen :)
Ok, ik heb een beetje een hekel aan jQuery want dat ziet er in mijn ogen uit als matrix taal. Hoe bedoel je onChange moeten posten?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$('select[name="idKlant"]').change(function() {
$.getJSON('url/naar/pagina.php?idKlant=' + $('option:selected',this).val(), function(rows) {
$('select[name="idKlant"] option').length = 0;
$(rows).each(function(key,value) {
$('select[name="idKlant"]').append('<option value=' + key + '>' + value + '</option>');
});
}
});
$.getJSON('url/naar/pagina.php?idKlant=' + $('option:selected',this).val(), function(rows) {
$('select[name="idKlant"] option').length = 0;
$(rows).each(function(key,value) {
$('select[name="idKlant"]').append('<option value=' + key + '>' + value + '</option>');
});
}
});
En dan url/naar/pagina.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$result = mysql_query("SELECT * FROM contactpersonen WHERE idKlant=" . (int)$_GET['idKlant'] . ");
$data = array();
while ($row = mysql_fetch_row($result)) {
$data[] = $row;
}
header('content-type: text/json');
echo json_encode($data);
?>
$result = mysql_query("SELECT * FROM contactpersonen WHERE idKlant=" . (int)$_GET['idKlant'] . ");
$data = array();
while ($row = mysql_fetch_row($result)) {
$data[] = $row;
}
header('content-type: text/json');
echo json_encode($data);
?>
En dit is uit mijn losse pols dus er kunnen nog wel wat probleempjes inzitten maar zou je op z'n minst een idee en een goede basis moeten geven ;-)
Dit kan dus alleen in jQuery en niet anders?
Waarom vindt je het er zo 'matrix' achtig uit zien? Misschien omdat het event-driven is?
Welk gedeelte van mijn voorbeeld snap je niet? Dan kan ik het misschien toelichten.
@albert ik denk tochecht als je een poging waagt dat jquery veel makkelijker te begrijpen is met 100 regels minder code ook gelijk overzichtelijker.
Kan ik toevallig ook alle contactpersonen oproepen en als een klant dan geselecteerd is alle contactpersonen uitkorten totdat alleen de contactpersonen er nog instaan die bij de klant horen?
Gewijzigd op 06/06/2012 12:46:01 door Albert de Wit
Waarom zou dat niet kunnen? Kwestie van event op goede plek er aan 'hangen'.. Maar er zijn veel tutorials te vinden over jQuery hoor op internet :) Belangrijkste is dat je leert hoe met events en selectors om te gaan.
Gewijzigd op 06/06/2012 12:59:22 door Albert de Wit
Ik zou zoeken op iets in de zin van 'Manipulate select javascript'.
Toevoeging op 06/06/2012 16:17:54:
Ik vraag me 1 ding nog steeds wel af.
Waarom werkte de document.getElementById('contact').innerHTML = 'test';
niet als ik die gewoon wel uitvoer.
Heb je al bekeken wat je firebug console daar over zegt? Misschien kan die een element met id contact niet vinden oid?
ik heb die <div id='contact'> in een table staan. Die table staat weer in een form. Kan dat een rol spelen in het niet kunnen vinden van de div?
jQuery in 30 dagen zou erg mooi zijn.
Heb je hiervan zelf ook geleerd? Zoja review?
ik heb hier zelf ook van geleerd, hij legt alles heel duidelijk uit met voorbeeldjes en hij gaat echt door alles heen ( wel in het engels )
Natuurlijk engels ;). Hartstikke bedankt!