解决方案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" οnclick="browseFolder('path')"
                                value="选择生成路径" />
                        </td>

 2.解决方案二: 自己写一个js读取本地硬盘的选择框, 缺点是外观上较上一个差一些.

 


1. <html>  
2. <head>  
3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
4. <title>无标题文档</title>  
5. </head>  
6. <body>  
7. <table border="0" cellpadding="0" width="100%" id="tb_show">          
8.         <tr>  
9. "18%">文件保存位置:</td>  
10. "82%">   
11. "file" size="40"  styleClass="inputbox"/>--%>  
12. "backDir" type="text" value ="C:\" size="100" width="500">  
13.             </td>  
14.         </tr>  
15.           
16.         <tr>  
17.             <td>目录位置:</td>  
18.             <td>   
19. "tables_drive" id="tables_drives" οnchange="get_drives()"
20.             </td>  
21.         </tr>  
22.           
23.         <tr>      
24. "2">              
25. "table_folder" id="table_folder"  size="10" multiple οndblclick="get_file()"></select>  
26.             </td>  
27.         </tr>  
28.   
29.         <tr>  
30. "2">  
31. "red">说明:双击列表框的一个选项,就将该文件夹下面的文件夹显示在该列表框中。第一个就是根目录</font>  
32.             </td>  
33.         </tr>  
34. </table>  
35. </body>  
36. </html>  
37. <script>  
38. /**//*
39. *初始化,将系统所有的驱动器放入table_drives列表
40. */
41. window.onload = new function
42. {  
43. var
44. new ActiveXObject("Scripting.FileSystemObject");  
45. new
46. "";  
47. for
48.     {  
49.       x = e.item();  
50.       s = s + x.DriveLetter;  
51. ":";  
52. if
53.          n = x.ShareName;  
54. else if
55.          n = x.VolumeName;  
56. else
57. "[驱动器未就绪]";  
58. ",";  
59.     }  
60. var drives = s.split(",");      
61. var tableDrives = document.getElementById("tables_drives");  
62. for ( var
63.     {  
64. var option = document.createElement("OPTION");  
65. ":");  
66. "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];  
67. "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];  
68.         tableDrives.add(option);  
69.     }  
70. }  
71.   
72. /**//*
73. *tables_drives列表中选中的驱动器上所有文件夹放入table_folder列表中
74. */
75. function
76. {  
77. var tableDrives = document.getElementById("tables_drives");  
78. var tableFolders = document.getElementById("table_folder");      
79. for ( var
80.     {          
81. if ( tableDrives.options[i].selected == true
82.         {  
83. var
84. var drive = tableDrives.options[i].value.split(":")[0].substring(1,tableDrives.options[i].value.split(":")[0].length);  
85. "backDir").value = drive + ":\\";  
86. new ActiveXObject("Scripting.FileSystemObject");              
87. if
88.             {  
89.                 d = fso.GetDrive(drive);  
90. if
91.                 {  
92.                     f = fso.GetFolder(d.RootFolder);   
93. new
94. "";  
95. for
96.                     {  
97.                      s += fc.item();  
98. ",";  
99.                     }  
100.                       
101. var
102. while(len >= 0)  
103.                     {  
104.                         tableFolders.options.remove(len);  
105.                         len--;  
106.                     }  
107. var option = document.createElement("OPTION");  
108. ":\\";  
109. ":\\";  
110.                     tableFolders.add(option);  
111. var folders = s.split(",");                                        
112. for
113.                     {  
114. "OPTION");  
115.                         option.value =  folders[j];  
116.                         option.text = folders[j];  
117.                         tableFolders.add(option);  
118.                     }      
119.                 }  
120. else
121.                 {  
122. "无法改变当前内容!")  
123.                 }                  
124.             }  
125. else
126. return false;    
127.         }          
128.     }  
129. }  
130.   
131. /**//*
132. *table_folder双击选项中的一个选项,就将该文件夹下面的文件夹显示在table_folder列表中。
133. */
134. function
135. {  
136. var tableFolders = document.getElementById("table_folder");      
137. var tableDrives = document.getElementById("tables_drives");  
138. for ( var
139.     {  
140. if ( tableFolders.options[i].selected == true
141.         {  
142. var
143. var
144. if ( folderpath.charAt(folderpath.length-1) == "\\"
145.             {  
146. "backDir").value = folderpath;  
147.             }  
148. else
149.             {  
150. "backDir").value = folderpath + "\\";  
151.             }  
152.               
153.               
154. new ActiveXObject("Scripting.FileSystemObject");      
155.             f = fso.GetFolder(folderpath);   
156. new
157. "";  
158. for
159.             {  
160.              s += fc.item();  
161. ",";  
162.             }      
163. var
164. while(len >= 0)  
165.             {  
166.                 tableFolders.options.remove(len);  
167.                 len--;  
168.             }          
169. var opt = "";              
170. var opt1 = "";  
171. for ( j = 0; j < folderpath.split("\\").length; j++ )  
172.             {  
173. var option = document.createElement("OPTION");  
174. "\\")[j]+"\\";  
175. if
176.                 {  
177.                     opt1 = opt;  
178.                     option.value = opt1.substring(0,opt1.length-1);  
179.                     option.text = opt1.substring(0,opt1.length-1);  
180.                     tableFolders.add(option);      
181.                 }  
182. else
183.                 {  
184.                     option.value = opt;  
185.                     option.text = opt;  
186.                     tableFolders.add(option);                              
187.                 }  
188.                               
189.             }  
190. if
191.             {  
192.                 tableFolders.options.remove(1);  
193.             }   
194. if ( s != ""
195.             {                  
196. var folders = s.split(",");                                        
197. for
198.                 {  
199. "OPTION");  
200.                     option.value = folders[j];  
201.                     option.text = folders[j];  
202.                     tableFolders.add(option);  
203.                 }      
204.             }                      
205.         }  
206.     }  
207. }  
208. </script>