2012-05-09 6 views
2

У меня есть форма, которая содержит 5 выпадающих списков, которые создаются PHP, запрашивая базу данных MySql. Списки строятся правильно.Ajax With 5 Drop Down Lists

Я хочу, чтобы пользователь мог выбрать из списка и заполнить форму внизу в зависимости от выбранного значения.

Это работает для 1-го списка.

Вот код из списка 1

<td width="90"> 
<p><select size="1" name="D1" onchange="showStudent(this.value);"> 
<?php while(list($id, $student_id)=mysql_fetch_row($result1)) { 
echo " 
<option value=\"".$student_id."\">".$student_id."</option>"; 
} 
?> 
</select></p> 
</td> 

Вот код из списка 2

<td> 
<p><select size="1" name="D2" onchange=”showStudent(this.value);” > 
<?php while(list($id, $student_id)=mysql_fetch_row($result2)) { 
echo " 
<option value=\"".$student_id."\">".$student_id."</option>"; 
} 
?> 
</select></p> 
</td> 

Вот Javascript код

<script type="text/javascript"> 
function CreateXmlHttpObject() { //function to return the xml http object 
    var xmlhttp=false; 
    try{ 
     xmlhttp=new XMLHttpRequest();//creates a new ajax object 
    } 
    catch(e) {  
     try{    
      xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");//this is for IE browser 
     } 
     catch(e){ 
      try{ 
      req = new ActiveXObject("Msxml2.XMLHTTP");//this is for IE browser 
      } 
      catch(e1){ 
       xmlhttp=false;//error creating object 
      } 
     } 
    } 

    return xmlhttp; 
} 

function showStudent(str) 
{ 
// alert("Made it to show students"+ str); 
if (str=="") 
{ 
document.getElementById("student_data").innerHTML=""; 
return; 
} 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
document.getElementById("student_data").innerHTML=xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","editstudent.php?d="+str,true); 
xmlhttp.send(); 
} 

</script> 

Если я выбираю из 1-го списка, все работает так, как должно. Если, однако, я выбираю из списков 2-5, ничего. Даже если я сначала выберу из одного из них. Я даже попытался изменить имя функции, чтобы она соответствовала определенному имени списка, и все же работает только первый.

Что мне не хватает?

+2

Просто из любопытства, не так ли, потому что у вас есть неправильные теги двойной цитаты вокруг вашего обмена в html для второго списка? '=" ShowStudent (this.value); ">' должно быть '=" showStudent (this.value); " > ' – ametren

+0

Да, это было, спасибо, очень, очень. Я читал этот код часами. Еще раз спасибо, свежие глаза всегда помогают – Hank

+0

Если вы не возражаете, я отправлю это как ответ – ametren

ответ

3

Я верю, что это потому, что у вас есть неправильные теги с двойными кавычками вокруг вашего обмена в html для второго списка? =”showStudent(this.value);” > должно быть ="showStudent(this.value);" >

Эти нечетные теги котировки часто бывают из копирования/вставки из слова, перспективы или других офисных приложений. Их легко упускать из виду!