清除 Internet Explorer 中的文件输入框

Posted

技术标签:

【中文标题】清除 Internet Explorer 中的文件输入框【英文标题】:Clearing file input box in Internet Explorer 【发布时间】:2011-10-22 16:20:13 【问题描述】:

我的页面上有一个文件上传框和一个清除按钮。当我按下清除按钮时,我希望文件上传框中的文本被清除。

以下内容在 Firefox 中有效,但在 IE 中无效(文本保留在那里)。有解决办法吗?

$("#clear").click( function() 
    $("#attachment").val("");
    //document.myform.attachment.value = "";
)

html

<form name="myform">
    <input type="file" name="attachment" id="attachment" />
</form>
<br /><button id="clear">Clear Attachment</button>

jsFiddle

【问题讨论】:

Clearing <input type='file' /> using jQuery的可能重复 【参考方案1】:

我发现的一个解决方案就是这样做:

document.getElementById('myUploadField').parentNode.innerHTML = document.getElementById('myUploadField').parentNode.innerHTML;

似乎它不应该工作,但它确实。

【讨论】:

太棒了。谢谢一堆。【参考方案2】:

这个解决方案比克隆输入元素更优雅。您将&lt;form&gt; 包裹在元素周围,在表单上调用reset,然后使用unwrap() 删除表单。与上面的 clone() 解决方案不同,您最终会得到相同的元素(包括在其上设置的自定义属性)。

在 Opera、Firefox、Safari、Chrome 和 IE6+ 中测试和工作。也适用于其他类型的表单元素,除了 type="hidden"。

http://jsfiddle.net/rPaZQ/

function reset(e) 
  e.wrap('<form>').closest('form').get(0).reset();
  e.unwrap();
​

【讨论】:

如果您不想完全重置,非常有用。 这很棒。谢谢。 像魅力一样工作..谢谢。 :) 不是万无一失的解决方案。值可能会从 UI 上的输入字段中清除,但仍然可以从 $("#myFileUpload").val() 访问【参考方案3】:

它在IE8 onwards 中是只读的,所以你不能清除它。绕过此安全功能的最简单方法是将元素替换为副本。

编辑 找到了一个先前的答案,建议使用相同的方法! Clearing <input type='file' /> using jQuery

【讨论】:

【参考方案4】:

这对我有用:

 $("input[type='file']").replaceWith($("input[type='file']").clone(true));

【讨论】:

【参考方案5】:

使用简单的javascript

formname.reset();

查看演示:http://jsfiddle.net/rathoreahsan/YEeGR/

【讨论】:

表单上有多个字段时有点问题。【参考方案6】:

尝试使用以下方法清除输入文件。

包括这个脚本:

 <script>
 function clearFileInputField(tagId) 
 document.getElementById(tagId).innerHTML =
    document.getElementById(tagId).innerHTML;

</script>

把 HTML 改成这样:

<div id="uploadFile_div">
<input type="file" class="fieldMoz" id="uploadFile" onkeydown="return false;" size="40" name="uploadFile"/>
</div>
<a onclick="clearFileInputField('uploadFile_div')" href="javascript:noAction();">Clear</a>`

【讨论】:

【参考方案7】:

使用老式的&lt;input type="reset" value="clear this"&gt;

【讨论】:

那不会重置整个表单吗?我想避免这种情况。 你给出的例子只有一个元素,所以我认为这很好。 抱歉给您带来了困惑。我想理论上我可以保存其他表单元素的值并在之后重新加载它们。 :P @tskuzzy:如果表单中有多个文件字段,则以后无法重新加载它们。

以上是关于清除 Internet Explorer 中的文件输入框的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 中的显示不正确 [关闭]

如何从批处理文件中打开和关闭 Internet Explorer?

如何发送文件以接收返回值(适用于 Internet Explorer 8-9)?

Internet Explorer 中的 addEventListener

Internet Explorer中的Imagenes PHP透明

如何从 Internet Explorer 11 降级到 Internet Explorer 10?