类型为file的input与它的预设值
为什么要预设值?这是因为一条数据的相关信息时,要把原有的数据当做预设值,这样在修改的时候,才不致于误将正确的数据改成错误的。我在想,之所以file类型的input不支持预设值,是因为在post的时候,系统会根据input中提供的本地路径,将本地的文件数据发送到服务器端,而如果预设的值不是一个可用的本地路径的话,将没有数据可供发送。设计者为了谨慎起见,不设置预设值也是很符合逻辑的了。
相信做网站程序的程序员都会碰到这个问题,文件上传的输入框似乎是不支持预设值的。类似这样的html代码:
<input type="file" name="picture" id="picture" value="mypicture.jpg">
在dreamweaver中可以在input框中显示出"mypicture.jpg"这一预设值,但一旦用浏览器打开,输入框却是空的,我试用javascript显示出其value的值,结果为空。也就是说,file类型的input不支持预设值!
为什么要预设值?这是因为一条数据的相关信息时,要把原有的数据当做预设值,这样在修改的时候,才不致于误将正确的数据改成错误的。我在想,之所以file类型的input不支持预设值,是因为在post的时候,系统会根据input中提供的本地路径,将本地的文件数据发送到服务器端,而如果预设的值不是一个可用的本地路径的话,将没有数据可供发送。设计者为了谨慎起见,不设置预设值也是很符合逻辑的了。
然而有时候我们需要这个功能。比如上面所讲的,显示数据库中已经存在的数据,如果在旁边再开设一个text类型的input就显得非常笨拙了,而如果不把原有的数据显示出来,用户又不知道是否需要修改这一数据。下面,我使用另一个方法解决了这个需要,而不再去考虑使用file类型的input的预设值。原代码如下:
<form1>
......
<input name="picture_db" type="text" id="picture_db" value="<%=Rs("picture")%>" style="display:block; height:20px; width:300px;" ondblclick="this.style.display='none';form1.picture.style.display='block';form1.hasnewpic.value='yes';"/>
<input name="picture" type="file" id="picture" size="46" style="display:none; height:20px; width:350px;" ondblclick="this.style.display='none'; form1.picture_db.style.display='block';form1.hasnewpic.value='no';" />
<input type="hidden" name="hasnewpic" id="hasnewpic" value="no" />
......
</form>
加入了部份javascript代码,这样在默认的情况下,会出现一个显示数据库中原有数据的text类型的input,而如果想修改这一数据,则只需双击它,它就变成file类型的input,并且这个过程可逆。这样,从用户的角度来看,就跟只有一个input一样,只是多了一步双击的操作。
以前在设计这一部份功能的时候,总需要在旁边以文字的形式添加,感觉远不如使用这个办法解决得完美。如果你有更好的解决办法,请不吝告诉我!