保留<;输入类型=“;文件“>;单击提交按钮时的字段


Retaining the value in the <input type="file"> field when submit button is clicked

我在表单中有一个<input type="file" >字段和其他文本字段,当我尝试使用浏览按钮上传任何文件,然后单击提交按钮时,输入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 
}

这是不可能的。浏览器安全性防止您预先填充"文件"输入字段,这样网站在没有用户首先授权的情况下(通过单击"浏览…"并选择文件)就无法窃取其意愿的私人文件。

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

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

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

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

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

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