解决方案1:
调用windows 的shell,但会有安全问题.
* browseFolder.js
*
该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框
* 以供用户实现对系统文件夹选择的功能
*
文件夹选择对话框起始目录由
* Shell.BrowseForFolder(WINDOW_HANDLE, Message, OPTIONS,
strPath)函数
* 的strPath参数设置
* 例如:0x11--我的电脑
* 0 --桌面
*
"c:\\"--系统C盘
*
* 用如下代码把该函数应用到一个HTML文件中:
* <script
src="browseFolder.js"></script>
* 或把下面代码直接COPY到<script
language="javascript">...</script>标签中;
* 特别注意的是,由于安全方面的问题,你还需要如下设置才能使本JS代码正确运行,
*
否者会出现"没有权限"的问题.
*
*
1、设置可信任站点(例如本地的可以为:http://localhost)
* 2、其次:可信任站点安全级别自定义设置中:设置下面的选项
*
"对没有标记为安全的ActiveX控件进行初始化和脚本运行"----"启用"
/**//***
path 要显示值的对象id
****/
function browseFolder(path) {
try {
var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息
var Shell = new ActiveXObject("Shell.Application");
var Folder = Shell.BrowseForFolder(0, Message, 64, 17);//起始目录为:我的电脑
//var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面
if (Folder != null) {
Folder = Folder.items(); // 返回 FolderItems 对象
Folder = Folder.item(); // 返回 Folderitem 对象
Folder = Folder.Path; // 返回路径
if (Folder.charAt(Folder.length - 1) != "\\") {
Folder = Folder + "\\";
}
document.getElementById(path).value = Folder;
return Folder;
}
}
catch (e) {
alert(e.message);
}
}
使用的时候:
<td>
<input type="text" name="path" />
</td>
<td>
<input type="button" onclick="browseFolder('path')"
value="选择生成路径" />
</td>
2.解决方案二:
自己写一个js读取本地硬盘的选择框,
缺点是外观上较上一个差一些.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
<table border="0" cellpadding="0" width="100%" id="tb_show">
<tr>
<td width="18%">文件保存位置:</td>
<td width="82%">
<%--<html:file property="file" size="40" styleClass="inputbox"/>--%>
<input name="backDir" type="text" value ="C:\" size="100" width="500">
</td>
</tr>
<tr>
<td>目录位置:</td>
<td>
<select name="tables_drive" id="tables_drives" onchange="get_drives()" ></select>
</td>
</tr>
<tr>
<td colspan="2">
<select name="table_folder" id="table_folder" size="10" multiple ondblclick="get_file()"></select>
</td>
</tr>
<tr>
<td colspan="2">
<font color="red">说明:双击列表框的一个选项,就将该文件夹下面的文件夹显示在该列表框中。第一个就是根目录</font>
</td>
</tr>
</table>
</body>
</html>
<script>
/**//*
*初始化,将系统所有的驱动器放入table_drives列表
*/
window.onload = new function init()
{
var fso, s, n, e, x;
fso = new ActiveXObject("Scripting.FileSystemObject");
e = new Enumerator(fso.Drives);
s = "";
for (; !e.atEnd(); e.moveNext())
{
x = e.item();
s = s + x.DriveLetter;
s += ":";
if (x.DriveType == 3)
n = x.ShareName;
else if (x.IsReady)
n = x.VolumeName;
else
n = "[驱动器未就绪]";
s += n + ",";
}
var drives = s.split(",");
var tableDrives = document.getElementById("tables_drives");
for ( var i = 0; i < drives.length-1; i++ )
{
var option = document.createElement("OPTION");
drives[i].split(":");
option.value = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];
option.text = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];
tableDrives.add(option);
}
}
/**//*
*tables_drives列表中选中的驱动器上所有文件夹放入table_folder列表中
*/
function get_drives()
{
var tableDrives = document.getElementById("tables_drives");
var tableFolders = document.getElementById("table_folder");
for ( var i = 0; i < tableDrives.options.length; i++ )
{
if ( tableDrives.options[i].selected == true )
{
var fso, f, fc, s;
var drive = tableDrives.options[i].value.split(":")[0].substring(1,tableDrives.options[i].value.split(":")[0].length);
document.getElementById("backDir").value = drive + ":\\";
fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.DriveExists(drive))
{
d = fso.GetDrive(drive);
if ( d.IsReady )
{
f = fso.GetFolder(d.RootFolder);
fc = new Enumerator(f.SubFolders);
s = "";
for (;!fc.atEnd(); fc.moveNext())
{
s += fc.item();
s += ",";
}
var len = tableFolders.options.length;
while(len >= 0)
{
tableFolders.options.remove(len);
len--;
}
var option = document.createElement("OPTION");
option.value = drive + ":\\";
option.text = drive + ":\\";
tableFolders.add(option);
var folders = s.split(",");
for ( j = 0; j < folders.length -1; j++)
{
option = document.createElement("OPTION");
option.value = folders[j];
option.text = folders[j];
tableFolders.add(option);
}
}
else
{
alert("无法改变当前内容!")
}
}
else
return false;
}
}
}
/**//*
*table_folder双击选项中的一个选项,就将该文件夹下面的文件夹显示在table_folder列表中。
*/
function get_file()
{
var tableFolders = document.getElementById("table_folder");
var tableDrives = document.getElementById("tables_drives");
for ( var i = 0; i < tableFolders.options.length; i++ )
{
if ( tableFolders.options[i].selected == true )
{
var fso, f, fc, s;
var folderpath = tableFolders.options[i].value.substring(0,tableFolders.options[i].value.length);
if ( folderpath.charAt(folderpath.length-1) == "\\" )
{
document.getElementById("backDir").value = folderpath;
}
else
{
document.getElementById("backDir").value = folderpath + "\\";
}
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(folderpath);
fc = new Enumerator(f.SubFolders);
s = "";
for (;!fc.atEnd(); fc.moveNext())
{
s += fc.item();
s += ",";
}
var len = tableFolders.options.length;
while(len >= 0)
{
tableFolders.options.remove(len);
len--;
}
var opt = "";
var opt1 = "";
for ( j = 0; j < folderpath.split("\\").length; j++ )
{
var option = document.createElement("OPTION");
opt = opt + folderpath.split("\\")[j]+"\\";
if ( j > 0)
{
opt1 = opt;
option.value = opt1.substring(0,opt1.length-1);
option.text = opt1.substring(0,opt1.length-1);
tableFolders.add(option);
}
else
{
option.value = opt;
option.text = opt;
tableFolders.add(option);
}
}
if ( tableFolders.options[0].value == tableFolders.options[1].value )
{
tableFolders.options.remove(1);
}
if ( s != "" )
{
var folders = s.split(",");
for ( j = 0; j < folders.length -1; j++)
{
option = document.createElement("OPTION");
option.value = folders[j];
option.text = folders[j];
tableFolders.add(option);
}
}
}
}
}
</script>
如果您还有好的解决方案,回帖分享一下吧.
分享到:
相关推荐
这里我们将探讨两种常见的解决方案。 **解决方案一:使用HTML5的`input[type="file"]`配合`webkitdirectory`属性** HTML5引入了`<input type="file">`元素,允许用户选择文件。虽然默认情况下,用户只能选择单个...
这个名为 "JavaScript +css3移动框架案例.zip" 的压缩包文件包含了一些利用这两种技术实现的实用特效代码,适用于移动平台。 首先,让我们详细了解一下JavaScript。JavaScript是一种轻量级的解释型编程语言,主要...
总的来说,这个JavaScript树形控件项目提供了一个可定制、交互性强的解决方案,可以方便地集成到任何需要树形结构展示的网页应用中。开发者通过熟练运用JavaScript和理解用户交互需求,成功实现了动态操作、键盘事件...
总的来说,这个“双边栏 js组件”提供了一个便捷的解决方案,帮助开发者快速创建具有专业外观和交互功能的两栏布局,减少了他们在布局和样式上的工作量,从而专注于应用程序的核心功能开发。在实际的前端项目中,...
1. left.jpg 和 left.png:这是两种不同格式的图片文件,可能用于后台管理界面的布局设计,如侧边栏的背景。开发者可能需要根据框架文档指示将它们应用到对应的CSS样式中。 2. admin:这个文件可能是后台管理系统的...
因此,在实际项目中,若需实现跨平台的文件操作功能,建议使用服务器端技术(如Node.js配合fs模块)或者前端框架提供的解决方案(如Electron应用)。 #### 总结 虽然直接使用JavaScript在客户端进行文件写入存在...
总的来说,CurvyCorners作为一个纯JavaScript实现的圆角边框解决方案,为那些需要在老版本IE中实现圆角效果的开发者提供了一种实用且灵活的选择。虽然随着浏览器的更新迭代,CSS3的border-radius已经得到了广泛支持...
2. **关闭UAC的两种方法**: - 方法1:开始 → 控制面板 → 查看方式:大图标 → 操作中心 → 更改用户账户控制设置 → 把滑块移到最下面。 - 方法2:开始菜单 → 点击“账户名称头像图标” → 更改用户账户控制...
总的来说,Czou.TimePicker时间选择控件以其简洁的设计、智能化的定位和灵活的定制性,为网页开发提供了一种高效的时间输入解决方案。开发者只需掌握基本的jQuery知识,就可以轻松地将其集成到网页中,提升用户在...
总之,Bootstrap 4的BsMultiSelect插件是一个功能强大的多选下拉框解决方案,它结合了jQuery的便利性和Bootstrap的美观性,为开发者提供了丰富的交互体验和高度的可定制性。无论是小型项目还是大型应用,它都能成为...
这个"asp.net 省市县联动选择[ajax]demo"提供了一个具体的解决方案,利用AJAX、JavaScript(JS)、jQuery技术来实现动态加载和联动效果,大大提升了用户体验。以下是关于这个demo涉及的知识点的详细解析: 1. **ASP...
"为Meteor的集合和反应性设计的客户端服务器自动完成" 是一个专为此目的而设计的解决方案,它结合了 CoffeeScript 和 JavaScript 的优势,以实现高效且响应迅速的用户体验。 Meteor 是一个全栈JavaScript框架,它...
在描述中提到了"ckeditor"和"ckfinder",这两个是常见的开源工具,它们协同工作,为用户提供了一个强大的文件编辑解决方案。 CKEditor是一款广泛使用的JavaScript富文本编辑器,支持多种浏览器环境,如Chrome、Fire...
在网页开发中,JavaScript(js)...在插件开发中,理解并熟练掌握这两者,能够帮助你创建出高效、优雅的解决方案。无论是自用还是分享,对这两种脚本语言的深入理解和灵活运用,都将极大地提升你的开发效率和用户体验。
总的来说,这个CSS3消息提示框插件充分利用了CSS3的新特性,为开发者提供了一种高效、美观的解决方案,同时保持了轻量级的代码结构,易于集成到各种网页项目中。无论是新手还是经验丰富的开发者,都能从中受益,提升...
jQuery Selectric就是这样一个插件,专注于改善下拉选择框的外观和交互。 **jQuery实例**是实际项目中使用jQuery代码的例子。在本压缩包中,`index.html`和`ajax.html`很可能是两个展示jQuery Selectric插件实际...
这里可能使用了递归方法来生成树的各个层级,或者使用了像jQuery UI的`treeview`插件这样的现成解决方案。这些插件简化了创建和管理树形结构的过程。 在Web开发中,JavaScript通常与后端语言如Java的jsp(Java...
QMUI iOS 遵循Apple的Human Interface Guidelines,并且兼容Swift和Objective-C两种语言,使其成为iOS开发者的强大助手。 QMUI_iOS-master 文件夹很可能是QMUI iOS 项目的源码仓库,其中包含了项目的源代码、示例...
文件夹可能包括了服务器端代码(如app.js)、前端HTML页面、JavaScript脚本(可能包括HTML5和Flash两种上传的实现)、以及可能的配置文件和示例文件。开发者可以参考这些代码,学习如何在自己的项目中实现类似的功能...