清算 <input type=&apos;file&apos; /> 使用jQuery

£可爱£侵袭症+ 提交于 2020-02-26 07:29:29

是否可以使用jQuery清除<input type='file' />控制值? 我尝试了以下方法:

$('#control').attr({ value: '' }); 

但这不起作用。


#1楼

快速解答:更换它。

在下面的代码中,我使用replaceWith jQuery方法将控件替换replaceWith自身的副本。 如果您有任何绑定到此控件上事件的处理程序,我们也要保留这些处理程序。 为此,我们传入true作为clone方法的第一个参数。

<input type="file" id="control"/>
<button id="clear">Clear</button>
var control = $("#control");

$("#clear").on("click", function () {
    control.replaceWith( control = control.clone( true ) );
});

小提琴: http : //jsfiddle.net/jonathansampson/dAQVM/

如果克隆在保留事件处理程序的同时出现任何问题,您可以考虑使用事件委托来处理父元素对此控件的单击:

$("form").on("focus", "#control", doStuff);

这样可以避免在刷新控件时将任何处理程序与元素一起克隆。


#2楼

文件输入的值是只读的(出于安全原因)。 您不能以编程方式将其清空(除非通过调用表单的reset()方法,该方法的作用域不仅限于该字段)。


#3楼

这适用于Chrome,FF和Safari

$("#control").val("")

可能不适用于IE或Opera


#4楼

在IE8中,为了安全起见,他们将“文件上载”字段设为只读。 参见IE团队博客文章

从历史上看,HTML文件上传控件()一直是大量信息泄露漏洞的根源。 为了解决这些问题,对控件的行为进行了两项更改。

为了阻止依赖于“窃取”击键来暗中诱骗用户在控件中键入本地文件路径的攻击,“文件路径”编辑框现在为只读。 用户必须使用“文件浏览”对话框明确选择要上传的文件。

此外,“ Internet区域”中的“上传文件时包括本地目录路径” URLAction已设置为“禁用”。 此更改可防止将潜在敏感的本地文件系统信息泄漏到Internet。 例如,Internet Explorer 8现在仅提交文件名image.png,而不是提交完整路径C:\\ users \\ ericlaw \\ documents \\ secret \\ image.png。


#5楼

这很简单(在所有浏览器中均可使用[歌剧除外]):

$('input[type=file]').each(function(){
    $(this).after($(this).clone(true)).remove();
});

JS小提琴: http//jsfiddle.net/cw84x/1/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!