我在表单中有一个<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进行验证。