2

我的服务器上有一个文件结构,看起来像这样:

在此处输入图像描述

我的问题相对复杂:如何<select>从服务器子文件的内容中逐步填充 html 标签。

例如,下面我有 3 个<select>标签,它们反映了上面显示的文件结构。当第一个选择改变时,jQuery 应该使用 AJAX 和 PHP 在服务器上找到该目录,并将所有子文件列出到第二个<select>. 单击第二个时,应列出该文件夹的所有子文件,依此类推。最终我想要5个<select>标签。

在此处输入图像描述

我认为这最好使用 jQuery 来完成,它会检测到选择中的变化:

$("select").change(function() {
        var selected = $(this).children("option:selected").text();
});

将该变量发送到 AJAX,它要求 PHP 文件返回该文件夹的子文件数组,并用该数组中的数据填充下一个选择。我不太自信的地方是 PHP。

我尝试过的:查看TreeView系统 - 不合适。试图修改TreeView系统以使用选择 - 没有结果!也许有人可以尝试修改我链接的那个?

在此先感谢,任何帮助将一如既往,非常感谢!

4

3 回答 3

1

使用此处讨论的方法获取目录路径 -->使用 scandir() 在目录中查找文件夹 (PHP)

收集子目录/文件的字符串(路径)并构建下一级

于 2012-05-11T07:22:30.297 回答
1
  1. 通过 JQuery 在select选择器中附加一个容器更改第一个选择时发出 AJAX 请求,如下所示:$('ajax_process.php #select_a').post()
  2. 像这样设置您的接收 AJAX 页面:

    //<?php
    //work, etc
    
    
    //you said "return array of the sub-files", so I reckon:
    
    $select = "<select id='data'>";
    foreach ($array as $select_item) {
       $select .= "<option value='$select_item'" . $select_item . "</option>";
    }
    $select .= "</select>";
    
    
    //now $select contains your HTML code for your select box.
    ?>
    
    //break out of php, then:
    <span id="select_a">
    <?php print $select; ?>
    </span>
    
  3. 您的 AJAX 调用现在可以返回您的动态选择框。

于 2012-05-11T07:25:09.543 回答
1

使用文件夹目录填充选择选项值:

<div class="selects">
    <select name="folder1">
        <option value="folder1">folder1</option>
        <option value="folder2">folder2</option>
        <option value="folder3">folder3</option>
    </select>
</div>

jQuery:

// Use live. Because the other selects will be filled with jquery.
$("select").live("change", function() {
    var folder = $(this).val();
    var select_id = $(this).attr("name").replace('folder', '');

    $.ajax({
        url: 'ajax.php',
        type: "POST",
        data: {"folder": folder},
        success: function(data) {
            var select = $("<select>");

            select_id++;

            select.attr("name", "folder"+select_id).append(data);
            $(".selects").append(select);
        }
    });
});

php:

<?php
    $shared = "some/path/to/shared/folders/";
    $folder = $_POST['folder'];

    $scan = scandir($shared.$folder);

    $bad = array(".", "..", ".DS_Store", "_notes", "Thumbs.db");

    $scan = array_diff($scan, $bad);

    foreach ($scan as $val)
    {
        if (is_dir($shared.$folder.'/'.$val))
            echo '<option value="'.$folder.'/'.$val.'">'.$val.'</option>';
    }
?>

我没有测试它可能有一些拼写错误,但这应该可以解决问题

于 2012-05-11T07:36:46.950 回答