2011-10-08 80 views
1

我有2个下拉菜单。用户从每个我希望为AJAX生成的答案选择一个选项后。我可以只用一个下拉使用发现这里的例子中做到这一点:阿贾克斯与2下拉菜单

http://www.w3schools.com/php/php_ajax_database.asp

我按照一些建议,试图修改脚本2名的下拉列表中,但我一直不成功。看起来数据没有被发布到getuser.php页面。

我的HTML代码页如下:

<?php 
    require('includes/application_top.php'); 
?> 

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<script type="text/javascript"> 
function showUser(current_size, current_shoe) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").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("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?size="+current_size"&shoe="current_shoe); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

    <?php 
    $query = "SELECT products_name, products_shoe_size FROM products_description WHERE language_id = 1 and products_shoe_size != '' "; 
    // Execute it, or return the error message if there's a problem. 
    $result = mysql_query($query) or die(mysql_error()); 

    ?> 

    <form> 
     <?php 

     $dropdown = "<select name='current_shoe' id='current_shoe'><option value=''>Select the model of your current shoes:</option>"; 
    while($row = mysql_fetch_assoc($result)) { 
     $dropdown .= "\r\n<option value='{$row['products_shoe_size']}'>{$row['products_name']}</option>"; 
    } 
    $dropdown .= "\r\n</select>"; 
    echo $dropdown; 

    ?> 

<select name="current_size" id="current_size" onchange="showUser(Document.getElementById('current_size').value, Document.getElementById('current_shoe').value)"> 
<option value="">Select the size of your current shoes:</option> 
<option value="2">2</option> 
<option value="2.5">2.5</option> 
<option value="3">3</option> 
<option value="3.5">3.5</option> 
<option value="4">4</option> 
<option value="4.5">4.5</option> 
<option value="5">5</option> 
<option value="5.5">5.5</option> 
<option value="6">6</option> 
<option value="6.5">6.5</option> 
<option value="7">7</option> 
<option value="7.5">7.5</option> 
<option value="8">8</option> 
<option value="8.5">8.5</option> 
<option value="9">9</option> 
<option value="9.5">9.5</option> 
<option value="10">10</option> 
<option value="10.5">10.5</option> 
<option value="11">11</option> 
<option value="11.5">11.5</option> 
<option value="12">12</option> 
<option value="12.5">12.5</option> 
<option value="13">13</option> 
</select> 

</form> 

<br /> 
<div id="txtHint"><b>Sizing info will be listed here.</b></div> 

</body> 
</html> 
    <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> 

我猜测,这个问题可以在这行代码中的一个发现:

function showUser(current_size, current_shoe) 

xmlhttp.open("GET","getuser.php?size="+current_size"&shoe="current_shoe); 

<select name="current_size" id="current_size" onchange="showUser(Document.getElementById('current_size').value, Document.getElementById('current_shoe').value)"> 

如果任何人有任何想法是什么我做错了,我会永远感激。我的头发快没了。

+0

不是在返回if(str ==“”){返回你每次你打电话给showUser?永远不要执行其余的代码? – Tjirp

+0

我意识到这个评论并没有回答你的问题,但是你会通过使用像jQuery这样的JavaScript库为你节省大量的时间。 – kroehre

回答

1

首先,当你打电话的变化事件处理showUser功能,你需要使用document.getElementById,不​​(注意小写d - 在JavaScript变量是区分大小写)。

其次是str定义?在showUser函数中,您检查它是否为空字符串,但是如果没有定义,将会抛出ReferenceError

除此之外,它似乎永远不会改变xmlhttp变量,所以它会泄漏到全局范围内,这是不好的做法。您应该在每个变量的范围顶部使用var关键字来声明每个变量。

+0

感谢您的提示。我已更改为小写,并摆脱此代码: – nico55555

+0

感谢您的提示。我已经从'D'更改为'd'并且摆脱了空str检查(这是我使用的示例中的剩余代码),但问题仍然存在。选择第二个下拉菜单似乎没有任何魔力。 – nico55555