我有一个<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
}
答案 0 :(得分:9)
不可能这样做。浏览器安全性阻止您预先填充文件输入字段,以便网站无法在用户未经授权的情况下窃取其遗嘱的私人文件(通过单击“浏览...”并选择文件)。
编辑:原生是不可能的 - 但你可以尝试一些CSS魔法来显示以前选择的文件名可能在文件输入框旁边提示用户。如果您想尝试并且非常酷,您还可以尝试将浏览器的本机文件输入文本显示区域与另一个填充了先前文件名的div叠加。但这会阻止点击输入区域,因此用户不友好。工作太多,奖励很少。
答案 1 :(得分:1)
出于安全目的,任何脚本都不允许设置此项,浏览器供应商将其作为文件输入readonly
实现。
答案 2 :(得分:1)
有一种方法可以做到这一点。使用AJAX submission method提交表单详细信息以进行验证,以便用户永远不会真正离开页面或“提交”表单。这样,您可以验证结果服务器端,但用户仍然填充了所有值,包括文件输入。
答案 3 :(得分:0)
如上所述,input[type=file]
是只读的。通过验证客户端的输入,除非所有字段都有效,否则可以阻止提交。 ......而且,在大多数情况下,它提供了更好的用户体验!
查看您最喜欢的框架的jquery.validation或其他一些验证插件,或者自己编写一个。请记住,您还应该在服务器端进行验证。
通过阻止请求,文件输入将保持其值,直到所有字段都正常。如果您需要服务器端验证,也可以使用ajax执行此操作。