出于安全性考虑,JS是不能直接设置File的value值的,下面是我总结出来的方法:

第1个方法是大多人传统做法,替换HTML代码,楼上的已经用到了,我不过是用正则优化一下;

第2个方法利用SendKeys模拟键盘操作,需要允许浏览器调用ActiveX才行;

第3个方法,有点像武侠小说里的"乾坤大挪移"一样,呵呵,看看就知道了!

<html>

<head>

<title>把input file類型的value清空--Test by 编程浪子</title>

<script>

function clearMethod1() {

var objFile
=document.getElementsByTagName_r('input')[0];

alert(
"\""+objFile.value+"\"已清除");

objFile.outerHTML
=objFile.outerHTML.replace(/(value=\").+\"/i,"$1\"");

}

function clearMethod2() {

var objFile
=document.getElementsByTagName_r('input')[0];

alert(
"\""+objFile.value+"\"已清除");

var WshShell
=new ActiveXObject("WScript.Shell");

objFile.focus();

objFile.createTextRange().select();

WshShell.SendKeys(
"{del}");

}

function clearMethod3() {

var objFile
=document.getElementsByTagName_r('input')[1];

alert(
"\""+objFile.value+"\"已清除"); objFile.value="";

}

</script>

<head>

<body>

<input type="file" value="C:\abc.txt"/><br/><br/>

<button onclick="clearMethod1();">清除大法1:李代桃僵</button><br/>

<button onclick="clearMethod2();">清除大法2:暗渡陈仓</button>

<br/><br/><br/><br/><br/><br/><br/>

<input type="text" value=""/><input type="file" value="C:\abc.txt" onchange="this.previousSibling.value=this.value;" style="width:20"/><br/><br/>

<button onclick="clearMethod3();">清除大法3:声东击西</button>

</body>

<html>
只有方法1:李代桃僵可以用。
方法2:暗渡陈仓—>也许是我的环境不支持ActiveX。
方法3:声东击西—>有很大的问题,表面上看值清除了,实际上并没有清除,而且当再次选择文件时,如果所选文件与清除之前是同一文件,那么,text中是不会再显示文件路径的。
所以,还是
objFile.outerHTML=objFile.outerHTML.replace(/(value=\").+\"/i,"$1\"");
才是正解
posted on 2011-04-14 13:22  dinoy  阅读(14531)  评论(1编辑  收藏  举报