javascript文件夹选择框的两种解决方案
来源:互联网 发布:斩首大刀淘宝 编辑:程序博客网 时间:2024/06/15 22:13
本人使用IE和360试验过,方案1不能用,方案二,可以
解决方案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控件进行初始化和脚本运行"----"启用"
browserFolder.js:
使用的时候:
<td>
<input type="text" name="path"/>
</td>
<td>
<input type="button" onclick="browseFolder('path')"
value="选择生成路径"/>
</td> 2.解决方案二:
自己写一个js读取本地硬盘的选择框, 缺点是外观上较上一个差一些.
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档
</title>
</head>
<body>
<tableborder="0" cellpadding="0" width="100%" id="tb_show">
<tr>
<td width="18%">文件保存位置:
</td>
<td width="82%">![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
<%
--<html:fileproperty="file" size="40" styleClass="inputbox"/>--%>
<input name="backDir" type="text" value ="C:\" size="100" width="500">
</td>
</tr>![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<tr>
<td>目录位置:
</td>
<td>
<select name="tables_drive" id="tables_drives" onchange="get_drives()"></select>
</td>
</tr>![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<tr>
<td colspan="2">
<select name="table_folder" id="table_folder" size="10" multiple ondblclick="get_file()"></select>
</td>
</tr>![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<tr>
<td colspan="2">
<font color="red">说明:双击列表框的一个选项,就将该文件夹下面的文件夹显示在该列表框中。第一个就是根目录
</font>
</td>
</tr>
</table>
</body>
</html>![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
<script>![](http://www.blogjava.net/Images/dot.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
*初始化,将系统所有的驱动器放入table_drives列表
*/
window.onload=newfunction init()
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var fso, s, n, e, x;
fso=new ActiveXObject("Scripting.FileSystemObject");
e=new Enumerator(fso.Drives);
s="";
for (;!e.atEnd(); e.moveNext())
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
x= e.item();
s= s+ x.DriveLetter;
s+=":";
if (x.DriveType==3)
n= x.ShareName;
elseif (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++ )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
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);
}
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
*tables_drives列表中选中的驱动器上所有文件夹放入table_folder列表中
*/
function get_drives()
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var tableDrives= document.getElementById("tables_drives");
var tableFolders= document.getElementById("table_folder");
for (var i=0; i< tableDrives.options.length; i++ )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
if ( tableDrives.options[i].selected==true )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
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))
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
d= fso.GetDrive(drive);
if ( d.IsReady )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
f= fso.GetFolder(d.RootFolder);
fc=new Enumerator(f.SubFolders);
s="";
for (;!fc.atEnd(); fc.moveNext())
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
s+= fc.item();
s+=",";
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
var len= tableFolders.options.length;
while(len>=0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
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++)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
option= document.createElement("OPTION");
option.value= folders[j];
option.text= folders[j];
tableFolders.add(option);
}
}
else
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
alert("无法改变当前内容!")
}
}
else
returnfalse;
}
}
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//*
*table_folder双击选项中的一个选项,就将该文件夹下面的文件夹显示在table_folder列表中。
*/
function get_file()
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var tableFolders= document.getElementById("table_folder");
var tableDrives= document.getElementById("tables_drives");
for (var i=0; i< tableFolders.options.length; i++ )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
if ( tableFolders.options[i].selected==true )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var fso, f, fc, s;
var folderpath= tableFolders.options[i].value.substring(0,tableFolders.options[i].value.length);
if ( folderpath.charAt(folderpath.length-1)=="\\" )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
document.getElementById("backDir").value= folderpath;
}
else
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
document.getElementById("backDir").value= folderpath+"\\";
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
fso=new ActiveXObject("Scripting.FileSystemObject");
f= fso.GetFolder(folderpath);
fc=new Enumerator(f.SubFolders);
s="";
for (;!fc.atEnd(); fc.moveNext())
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
s+= fc.item();
s+=",";
}
var len= tableFolders.options.length;
while(len>=0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
tableFolders.options.remove(len);
len--;
}
var opt="";
var opt1="";
for ( j=0; j< folderpath.split("\\").length; j++ )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var option= document.createElement("OPTION");
opt= opt+ folderpath.split("\\")[j]+"\\";
if ( j>0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
opt1= opt;
option.value= opt1.substring(0,opt1.length-1);
option.text= opt1.substring(0,opt1.length-1);
tableFolders.add(option);
}
else
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
option.value= opt;
option.text= opt;
tableFolders.add(option);
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
}
if ( tableFolders.options[0].value== tableFolders.options[1].value )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
tableFolders.options.remove(1);
}
if ( s!="" )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
var folders= s.split(",");
for ( j=0; j< folders.length-1; j++)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif)
{
option= document.createElement("OPTION");
option.value= folders[j];
option.text= folders[j];
tableFolders.add(option);
}
}
}
}
}
</script> 0 0