2011-08-28 8 views
0

Possible en double:
How to dynamically populate options on dropdown lists based on selection in another dropdown?menu déroulant populate automatique basée sur la sélection précédente

Je tables MySQL regarder comme ça

table régions

id  | region 
------------------- 
1  | Region1 
2  | Region2 

.. .

et écoles Table

id  | school 
------------------- 
1  | schno1 
1  | schno5 
1  | schno6 
2  | scho120 

Il y a plusieurs menus de sélection (déroulants) dans mon formulaire d'inscription. La liste déroulante des régions ressemble à cela

<td> 
<select name="region" id="region"> 
<option value="">Region</option> 
<?php 
$result=$db->query("SELECT * FROM regions"); 
while($row=$result->fetch_array(MYSQLI_BOTH)) 
{ 
    echo '<option value="'.$row[0].'">'.$row[1].'</option>'; 
    } 
?> 
</select> 

</td> 
<td> 
<div id="sch_dropdown"> 
<select name="school" id="school"> 
<option value="">School</option> 
</select> 
</div> 
<span id="loading"><img src="core/design/img/jquery-ui/loading.gif" width="16" height="16" align="absmiddle">&nbsp;Loading...</span> 
<div id="no_sch">No schools found</div> 
</td> 

Je veux remplir une nouvelle liste déroulante basée sur les sélections précédentes. Ce que je veux faire est, obtenir l'identification de «régions», puis remplir le menu déroulant d'écoles basé sur l'id (identification de la sélection précédente) du tableau «d'écoles» à la volée. Voici mon code mais ça ne marche pas.

Mon js ressemble que

$(document).ready(function(){ 

function populate() { 

     fetch.doPost('core/code/includes/search.php'); 

} 

$('#region').change(populate); 

var fetch = function() { 

var schools = $('#schools'); 
return { 
    doPost: function(src) { 

    $('#loading').show(); 
    $('#sch_dropdown').hide(); 
    $('#no_sch').hide(); 


     if (src) $.post(src, { region_code: $('#region').val() }, this.getschools); 
     else throw new Error('No SRC was passed to getCounties!'); 
    }, 

    getschools: function(results) { 
     if (!results) return; 
     schools.html(results); 

    $('#loading').hide(); // Hide the Loading... 
    $('#sch_dropdown').show(); // Show the drop down 
    } 
} 
}(); 

populate(); 

}); 

et search.php

if(isSet($_POST['region_code'])) { 
$res=$db->query("SELECT * FROM schools WHERE id='".$_POST['region_code']."'"); 
while ($row = $res->fetch_array(MYSQLI_BOTH)) { 
echo '<option value="'.$row[0].'">'.$row[1].'</option>'; 
} 
} 

S'il vous plaît aidez-moi à terminer. Merci d'avance.

+0

@Tural Teyyuboglu jeter un oeil à ma réponse modifiée –

+0

s'il vous plaît quelqu'un me aider à le faire fonctionner –

Répondre

1

Vous appelez getschools() sans paramètre, il ne renvoie donc rien. Vous étiez censé transmettre le résultat obtenu après avoir envoyé une requête POST au fichier search.php.

EDIT: Je ne suis pas sûr que cela fonctionne, car je ne l'ai pas testé en premier. Mais je pense que vous devriez changer

if (src) $.post(src, { region_code: $('#region').val() }, this.getschools); 

à

if (src) $.post(src, { region_code: $('#region').val() }, function(data){ 
     getschools(data); 
    }); 
+0

pouvez-vous modifier mon mauvais morceau de code? –

+0

http://prntscr.com/2t8pt obtenir cette erreur –

+0

Essayez d'enlever le mot-clé 'this' –

Questions connexes