12

我在表单中有一个<input type="file" >字段以及其他文本字段,当我尝试使用浏览按钮上传任何文件然后单击提交按钮时,输入类型=“文件”字段中的值消失,我希望浏览的值如果其他字段中存在错误,则保留在该<input type="file" >字段中,有什么方法可以保留浏览的值并在<input type="file" >单击提交按钮时保留在该字段中,

<form action="form.php" method="post" enctype= multipart/form-data> 

<input type="file" value="$file" name="file"/> 
<input type="text" value="$line" name="line"> 
 <input type="submit"  name="btnsubmit"> 

</form> 

if($_POST['btnsubmit']) 
{
$line =$_POST['line'];
$file =$_FILES['file'] ['name'];

if($line) 
{
//do something
//conditions for   file check   here 

}
else 
//error 

}
4

4 回答 4

9

这是不可能的。浏览器安全性阻止您预先填充文件输入字段,这样网站就无法在未经用户授权的情况下随意窃取私人文件(通过单击“浏览...”并选择文件)。

编辑:本机不可能做到这一点- 但您可以尝试一些 CSS 魔法来显示以前选择的文件名,可能在文件输入框旁边以提示用户。如果你想尝试并且真的很酷,你也可以尝试用另一个填充了之前文件名的 div 覆盖浏览器的本机文件输入文本显示区域。但这会阻止点击输入区域,因此对用户不友好。工作太多,回报太少。

于 2012-07-11T06:04:06.877 回答
1

出于安全目的,这不允许由任何脚本设置,浏览器供应商将其作为文件输入实现为readonly.

于 2012-07-11T06:05:19.103 回答
1

有一种方法可以做到这一点。使用AJAX 提交方法提交表单详细信息以进行验证,因此用户永远不会真正离开页面或“提交”表单。这样,您可以在服务器端验证结果,但用户仍然填充了所有值,包括文件输入。

于 2013-10-25T06:45:59.267 回答
0

如前所述,input[type=file]是只读的。通过在客户端验证您的输入,您可以防止提交发生,除非所有字段都有效。...而且,在大多数情况下,它提供了更好的用户体验!

查看 jquery.validation 或您喜欢的框架的其他一些验证插件,或者自己编写一个。请记住,您还应该在服务器端进行验证。

通过阻止请求,文件输入将保持其值,直到所有字段都正常。如果您需要服务器端验证,您也可以使用 ajax 来执行此操作。

于 2012-07-11T06:10:57.170 回答