下拉列表显示所有目录

时间:2015-01-08 08:54:25

标签: php jquery ajax drop-down-menu nested

我想实现一个有三个下拉菜单的php表单。第一个下拉列表应显示给定路径的所有目录。选择第一个下拉列表的目录后,第二个下拉列表应显示包含其子目录。最后,第三个下拉列表应该包含第二个下拉列表的所有子目录。所有目录和子目录都包含元素。

我已经实现了第一个下拉列表,但我无法为第二个和第三个下拉列表执行此操作。

你能帮我吗?

提前谢谢。

我所做的是:

<select name="s1" id="client" onChange="showSelected(this.value)">
      <option value="" selected="selected">Select client</option>

<?php
    if (chdir("/home/clients" )) {
       $dirs = glob('*', GLOB_ONLYDIR);
       foreach($dirs as $val){
          echo '<option value="'.$val.'">'.$val."</option>\n";
       }        
    }
?>

</select>



<script type="text/javascript">
    function showSelected(val){
        document.getElementById
('selectedResult').innerHTML = "Client is : " + val;
    }
</script>

2 个答案:

答案 0 :(得分:0)

你试过scandir()吗?它列出了给定路径中的所有目录,如果选择目录,则可以使用一些$.ajax()来获取目录的子目录。 http://php.net/manual/en/function.scandir.php

编辑:忘了提及scandir()返回一个目录数组,以便你可以预先知道它。你可以跳过这样的文件:

<?php
function getDirs($path){
    $contents=scandir($path);
    $dirs = array();
    foreach($contents as $content){
        if(!is_file($content)){
            $dirs[] = $content;
        }
    }
    return $dirs;
}
?>
<select>
<?php $my_dir = "/home/www/"; ?>
<?php foreach(getDirs($my_dir) as $dir){echo '<option class="'.$my_dir.'">'. $dir . '</option>';} /*now you have the directories listed into a dropdown list*/ ?>

</select>

在javascript部分,我有想法,但我没有时间测试它们。我希望至少你掌握了编程的基础知识。祝你好运!

答案 1 :(得分:0)

您可以创建一个参数为parent dir

的PHP函数
function getDir($parent_dir = '/home/clients'){
    $html = '<select name="s1" id="client" onChange="showSelected(this.value)">';
    $html .= '<option value="" selected="selected">Select client</option>';

    if (chdir($parent_dir)) {
       $dirs = glob('*', GLOB_ONLYDIR);
       foreach($dirs as $val){
          $html .= '<option value="'.$val.'">'.$val.'</option>';
       }        
    }
    return $html;
}

然后使用ajax调用此php函数,并在选择框中选择值并在浏览器上显示。