使用可点击链接填充 Select 框
Populate Select Box with Clickable Links
我有一个 PHP、JS、AJAX 应用程序正在尝试完成。
我有一个 select 框,它从服务器端文件夹中的文件填充。
工作正常,但我正在尝试使 select 框选项可单击或悬停。
更好的解决方案可能是使用 AJAX 联系 PHP 小页面,该页面提供 JSON 中的文件列表以返回给 JavaScript,并让此 AJAX 运行 由悬停侦听器触发时
我不知道足够的 php 语法来让它工作并且尝试了很多方法(好吧,但它有不同的变体),最新的在评论中。
理想情况下,我还希望它只按文件名填充,格式为年-月-日,降序排列。
这是我的代码。非常感谢任何帮助。
尝试了评论中的内容和许多变体。
<?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>";
?>
对于任何感兴趣的人,这一切现在都在起作用。
我对 correct/accepted 答案做了很多修改。
代码如下:
css(我希望下拉按钮看起来像 standard/default 按钮,因此删除了 css):
/* 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:
<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):
<?php
$files = array_slice(scandir('upload/'), 2);
rsort($files);
echo json_encode($files);
?>
从 guide from w3schools 以及您自己的代码构建下拉菜单。这是使用 <select>
菜单并必须构建一些 JavaScript 以使其类似于下拉菜单的工作方式的替代方法,这将是一种糟糕的做法。
!!! 先说明一下,这是直接取自存储在您的上传目录中的文件名。如果您没有正确清理/随机化正在上传的文件名,用户可能会逃避此 HTML 并设置 XSS 攻击 - 请注意上传时的文件名以避免这种情况。
您将首先设置基础 HTML 结构,这将用于异步、重新加载的下拉菜单:
<div class="dropdown">
<button class="dropbtn" id="file-browser">Dropdown Menu ACTIVATE</button>
<div class="dropdown-content" id="file-list">
</div>
</div>
现在您将为静态的、不重新加载的下拉菜单填写数据:
<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>
最后,您有 CSS,直接来自 w3schools - 这些是构建的重要部分:
.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()
:
来完成
$("#file-browser").hover(
function {
}
);
现在我们要加载数据,我们将利用 AJAX;更具体地说 jQuery 的 .ajax()
:
$("#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:
<?php
$files = scandir('upload/');
sort($files);
echo json_encode($files);
?>
拼图的最后一块将是所有 JS -悬停侦听器,AJAX 调用 - 处理数据以从我们的 [=51] 中列出 JSON 文件列表=]:
$("#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 文件加载并使用文件链接填充下拉菜单。
我有一个 PHP、JS、AJAX 应用程序正在尝试完成。 我有一个 select 框,它从服务器端文件夹中的文件填充。 工作正常,但我正在尝试使 select 框选项可单击或悬停。 更好的解决方案可能是使用 AJAX 联系 PHP 小页面,该页面提供 JSON 中的文件列表以返回给 JavaScript,并让此 AJAX 运行 由悬停侦听器触发时 我不知道足够的 php 语法来让它工作并且尝试了很多方法(好吧,但它有不同的变体),最新的在评论中。 理想情况下,我还希望它只按文件名填充,格式为年-月-日,降序排列。 这是我的代码。非常感谢任何帮助。
尝试了评论中的内容和许多变体。
<?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>";
?>
对于任何感兴趣的人,这一切现在都在起作用。 我对 correct/accepted 答案做了很多修改。 代码如下:
css(我希望下拉按钮看起来像 standard/default 按钮,因此删除了 css):
/* 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:
<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):
<?php
$files = array_slice(scandir('upload/'), 2);
rsort($files);
echo json_encode($files);
?>
从 guide from w3schools 以及您自己的代码构建下拉菜单。这是使用 <select>
菜单并必须构建一些 JavaScript 以使其类似于下拉菜单的工作方式的替代方法,这将是一种糟糕的做法。
!!! 先说明一下,这是直接取自存储在您的上传目录中的文件名。如果您没有正确清理/随机化正在上传的文件名,用户可能会逃避此 HTML 并设置 XSS 攻击 - 请注意上传时的文件名以避免这种情况。
您将首先设置基础 HTML 结构,这将用于异步、重新加载的下拉菜单:
<div class="dropdown">
<button class="dropbtn" id="file-browser">Dropdown Menu ACTIVATE</button>
<div class="dropdown-content" id="file-list">
</div>
</div>
现在您将为静态的、不重新加载的下拉菜单填写数据:
<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>
最后,您有 CSS,直接来自 w3schools - 这些是构建的重要部分:
.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()
:
$("#file-browser").hover(
function {
}
);
现在我们要加载数据,我们将利用 AJAX;更具体地说 jQuery 的 .ajax()
:
$("#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:
<?php
$files = scandir('upload/');
sort($files);
echo json_encode($files);
?>
拼图的最后一块将是所有 JS -悬停侦听器,AJAX 调用 - 处理数据以从我们的 [=51] 中列出 JSON 文件列表=]:
$("#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 文件加载并使用文件链接填充下拉菜单。