首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充带有可单击链接的选择框

填充带有可单击链接的选择框
EN

Stack Overflow用户
提问于 2019-08-02 21:05:26
回答 1查看 195关注 0票数 1

我有一个PHP,JS,AJAX应用程序,我正试图完成。我有一个从服务器端文件夹中的文件中填充的复选框。工作正常,但我试图使选择框选项可点击或在悬停。一个更好的解决方案可能是使用AJAX来联系一个PHP小页面,该页面提供了一个JSON中的文件列表,并在由悬停监听器触发时运行这个AJAX --我不知道足够的php语法使它正常工作,并且尝试了许多方法(很好,但在它上有不同的变体),最近的一个方法在注释中。理想情况下,我还希望它只按文件名填充,按年月日格式,按降序排列。这是我的密码。非常感谢你的帮助。

尝试了评论和许多变体中的内容。

代码语言:javascript
复制
<?php
$files = scandir('upload/');
sort($files);
echo "<select>";
foreach($files as $file){
   //echo'<a href="upload/'.$file.'">'.$file.'</a>'";
   echo "<option value=' $file'> $file </option>";
}
echo "</select>";
?>

对任何感兴趣的人来说,这一切现在都在起作用。我对正确的/被接受的答案作了相当多的修改。守则如下:

css (我希望下拉按钮看起来像一个标准/默认按钮,因此去掉了它的css ):

代码语言:javascript
复制
/* The container <div> - needed to position the dropdown content */
.dropdown {
  position: relative;
  display: inline-block;
}

/* Dropdown Content (Hidden by Default) */
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #ECF0F1;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
  white-space: nowrap;
}

/* Links inside the dropdown */
.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

/* Change color of dropdown links on hover */
.dropdown-content a:hover {background-color: #ddd;}

/* Show the dropdown menu on hover */
.dropdown:hover .dropdown-content {display: block;}

php、jquery和ajax:

代码语言:javascript
复制
<div class="dropdown">
  <button class="dropbtn" id="file-browser">Latest Timesheet</button>
  <div class="dropdown-content" id="file-list">

<?php
  $files = array_slice(scandir('upload/'), 2);
  rsort($files);
  foreach ($files as $file) {
    $file = pathinfo($file)['filename'];
     echo "<a href='upload/$file'>$file</a>";
}  
?>
</div>
</div>

<script>
    $("#file-browser").hover(
  function (e) {
  $.ajax({
    url: "my_dropdown_data.php",
    dataType: "json",    
    success: function(response) {    
      $("#file-list").html(""); //Clear current file list
      response.forEach(
        function(file) {
           $("#file-list").append("<a href='upload/" + file + "'>" + file.substr(0, file.length - 4) + "</a>");
        }
      );
    },
    error: function(response) {
      console.log(response);
    }
    })
  }
);
</script>

外部php文件(my_dropdown_data.php):

代码语言:javascript
复制
<?php
  $files = array_slice(scandir('upload/'), 2);
  rsort($files);
  echo json_encode($files);
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-02 23:12:31

w3schools指南中构建下拉菜单以及您自己的代码。这是一个替代使用<select>菜单和必须构建一些JavaScript使其工作类似下拉菜单,这将是糟糕的做法。

在任何事情之前,都是直接从您的上传目录中存储的文件名中提取的。如果您没有正确地清除正在上载的文件名/随机化文件名,用户可能会转义此HTML并设置XSS攻击--请注意上传时的文件名以避免这种情况。

首先设置基本的HTML结构,这将用于异步的、重新加载的下拉菜单:

代码语言:javascript
复制
<div class="dropdown">
  <button class="dropbtn" id="file-browser">Dropdown Menu ACTIVATE</button>
  <div class="dropdown-content" id="file-list">
  </div>
</div>

现在,您将填写静态而不是重新加载下拉菜单的数据:

代码语言:javascript
复制
<div class="dropdown">
  <button class="dropbtn">Dropdown Menu ACTIVATE</button>
  <div class="dropdown-content">

  <?php
  $files = scandir('upload/');
  sort($files);
  foreach ($files as $file)
     echo "<a href='upload/$file'>$file</a>";
  ?>

  </div>
</div>

最后,您可以直接从w3schools获得CSS --这些是需要构建的重要部分:

代码语言:javascript
复制
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  z-index: 1;
}

.dropdown-content a {
  display: block;
}

.dropdown:hover .dropdown-content {
  display: block;
}

现在,要让它动态加载数据,您不需要首先加载数据,因为数据将被覆盖,但是我们确实需要一个侦听器,当按钮悬停时(应该显示下拉列表)。这将通过jQuery的.hover()来实现

代码语言:javascript
复制
$("#file-browser").hover(
  function {

  }
);

现在我们想要加载数据,我们将利用AJAX来实现;更具体地说,jQuery的.ajax()

代码语言:javascript
复制
$("#file-browser").hover(
  function {
    url: "my_dropdown_data.php",
    dataType: "json",
    success: function(response) {

    },
    error: function(response) {
      console.log(response);
    }
  }
);

数据将来自上面的文件my_dropdown_data.php,这与静态数据下拉列表中的代码本质上是相同的,只是回显为JSON:

代码语言:javascript
复制
  <?php
  $files = scandir('upload/');
  sort($files);
  echo json_encode($files);
  ?>

拼图的最后一部分将是所有的JS -hover侦听器,AJAX调用--通过处理数据列出来自我们PHP的JSON文件列表:

代码语言:javascript
复制
$("#file-browser").hover(
  function {
    url: "my_dropdown_data.php",
    dataType: "json",
    success: function(response) {
      $("#file-list").html(""); //Clear current file list
      response.forEach(
        function(file) {
          $("#file-list").append("<a href='upload/" + file + "'>" + file + "</a>");
        }
      );
    },
    error: function(response) {
      console.log(response);
    }
  }
);

瞧,这里有您的下拉菜单,当数据悬停在上面时,将从PHP文件中加载数据,并使用指向文件的链接填充下拉菜单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57333435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档