Javascript Php脚本/java脚本,帮助放置两个双动态生成的下拉菜单

Javascript Php脚本/java脚本,帮助放置两个双动态生成的下拉菜单,javascript,php,ajax,Javascript,Php,Ajax,虽然我对php脚本并不陌生,但我确实有一个问题,就是为了这个目的而将它与JavaScript结合起来。 我有一个表单,包含一个类别下拉菜单,选择的类别修改了可用于子类别下拉菜单的选项。。。我已经能够用php和javascript实现这一点 我的问题是,在相同的形式下,无论何时选择州,都会动态生成州和城市下拉菜单,并且在子类别中选择的选项会被删除。 关于如何在同一页面上将这两个不同类别的下拉菜单组合在一起,有什么帮助吗 以下是与我的问题相关的主要代码 function reload(form) {

虽然我对php脚本并不陌生,但我确实有一个问题,就是为了这个目的而将它与JavaScript结合起来。 我有一个表单,包含一个类别下拉菜单,选择的类别修改了可用于子类别下拉菜单的选项。。。我已经能够用php和javascript实现这一点 我的问题是,在相同的形式下,无论何时选择州,都会动态生成州和城市下拉菜单,并且在子类别中选择的选项会被删除。 关于如何在同一页面上将这两个不同类别的下拉菜单组合在一起,有什么帮助吗

以下是与我的问题相关的主要代码

function reload(form)
{ 
  var val=form.cat.options[form.cat.options.selectedIndex].value;
  var val1=form.location.options[form.location.options.selectedIndex].value;
  self.location='reg_practice_details.php?cat=' + val  + ''location=' + val1 ;
} 


 
//下拉菜单的类别/子类别组的下拉代码

看起来您的javascript正在选择两个菜单。 -->不是这样的

有一些拼写错误,比如

self.location='reg_practice_details.php?cat=' + val  + '&location=' + val1 ;
while循环中缺少的
}
,以及其他一些

但除此之外,您要做的是:如果用户在
cat
state
下拉菜单上进行选择,则
subcat
city
下拉菜单应分别更改并仅提供适用的值

正如我所说,您正在刷新完整的表单(
reload(this.form)
)以更改一个下拉菜单。您正在使用
$\u GET
变量设置
所选的
值。这些是从URL检索的,因此更改表单不会重新加载整个页面,因此不会拾取任何(新的)
$\u GET
vars。(有趣的是,这个错误出现在所有在网络上浮动的执行器上。要么你的老师/教授犯了个错误,要么你不懂客户端/服务器端编程)

有两种可能的选择

  • 让PHP将数据库结果回送到Javscript中(作为数组)。浏览器将获取这些结果,Javascript可以访问这些结果。然后使用javascript的onChange()方法检测对
    cat
    state
    下拉菜单的任何更改,如果检测到,让javascript用子选项重新创建/重新填充正确的下拉菜单(因此
    city
    subcat

    虽然这不是最好的,但却是最简单的

    // Getting the data from Mysql table for first list box
      $class_query=mysql_query("SELECT DISTINCT class_id,class FROM categories order by class"); 
    
    // get all subcategories, we do the 'where class_id=$cat on the client-side 
      $subcat_query=mysql_query("SELECT DISTINCT subcategory FROM subcategories"); 
    
    //Dropdown menu for state and city
      $state_query=mysql_query("SELECT DISTINCT state_id,state FROM state order by state"); 
    
    // get all the cities, we'll check for the state ( state_id=$location) client-side
    // note that getting DISTINCT cities, means that if cities appear in more states,
    // they're not fetched... 
      $city_query=mysql_query("SELECT DISTINCT city FROM city order by city");
    ?>
    

    ajax调用将接收结果(显然您需要在该php文件中回送查询结果),您可以使用该结果(重新)填充下拉菜单。 由于每个浏览器/操作系统的AJAX实现各不相同,因此使用类似jQuery的库可以大大简化工作。(jQuery文档也很棒)

  • 无论你选择哪个选项,这都会给你一些出发点。由于这是某种家庭作业的练习,所以我不会给出完整的代码;)(另外,没有PHP测试环境。)

    有些事情需要考虑

    • 过度使用了
      @$var
      。真的没有必要 抑制错误,所以不要:)
    • 如果此代码来自教程, 另找一个。代码很明显是旧的,谷歌会返回问题 从2007年开始。在2007年,这个代码是如此,现在它是一个明确的禁忌
    • 如果 如果您在此过程中遇到任何特定错误/问题,请搜索SO/google 或者创建一个新的特定问题

    希望你现在能走得更远一点

    欢迎来到SO,试着向我们展示一下你的尝试。我刚刚编辑了我的问题,加入了代码。谢谢,请阅读about页(),我看一下你的代码。你学习了一些关于SO的知识并获得了一枚徽章!(还有,我对你的帖子做了一些编辑…)我想知道是否有一种方法可以做到这一点而不必重新加载页面,因为我需要同一页面上的类别/子类别下拉菜单以及州/城市下拉菜单。。我愿意接受新的更好的方法。语法错误没有提供解决方案。。。求你了,我需要帮助谢谢你,@purepilture。。我一直在屏幕上等待你的帮助
    // Getting the data from Mysql table for first list box
      $class_query=mysql_query("SELECT DISTINCT class_id,class FROM categories order by class"); 
    
    // get all subcategories, we do the 'where class_id=$cat on the client-side 
      $subcat_query=mysql_query("SELECT DISTINCT subcategory FROM subcategories"); 
    
    //Dropdown menu for state and city
      $state_query=mysql_query("SELECT DISTINCT state_id,state FROM state order by state"); 
    
    // get all the cities, we'll check for the state ( state_id=$location) client-side
    // note that getting DISTINCT cities, means that if cities appear in more states,
    // they're not fetched... 
      $city_query=mysql_query("SELECT DISTINCT city FROM city order by city");
    ?>
    
    <script type="text/javascript">
    var class_array = Array();
    var subcat_array = Array();
    
    <?php
    // prepare all dropdown menus.
    // the output is written as javascript (JS) arrays
    // as the browser loads the page, it reads the arrays as JS, and JS can use it
    // position this somewhere in your <body>, after the queries, before the form
    
      while($noticia2 = mysql_fetch_array($class_query)) {
        echo "class_array = [" . $noticia2[class_id] . "] = " . $noticia2[class];
      }
    
      $n=0
      while($noticia = mysql_fetch_array($subcat_query)) { 
        echo "subcat_array = [".$n."] = {
                             subcategory: \"" . $noticia[subcategory] . "\"
                             class_id: \"" . $noticia[class_id] . "\"}";
        $n++;
      }
    ?>
    </script>
    
    if(isset($cat) and strlen($cat) > 0)
    { 
      $quer=mysql_query("SELECT DISTINCT subcategory FROM subcategories where class_id=$cat order by subcategory"); 
    }
    else
    {
        $quer=mysql_query("SELECT DISTINCT subcategory FROM subcategories order by subcategory"); 
    }