在firefox下使用js清空file控件的value非常简单, 即:obj.value=""; 就可以了,但在ie下,由于出于安全等方面考虑,file的value被设为了只读,所以js对其不能直接地控制,因此我们只能使用一些变通的方法来解 决,网上对此也有好些方法,在此我谈谈自己认为最好的几种。
下面以上传文件格式限制(只对扩展名判断)这一实例来说明。
1、file控件由HTML生成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function CheckUpLoadFile(obj) {
DenyExt = "exe|cmd|jsp|php|asp|aspx|html|htm";
var FileExt = "";
FileExt = obj.value.substr(obj.value.lastIndexOf(".") + 1).toLowerCase();
if (DenyExt.indexOf(FileExt) != -1) {
alert("You can't upload the file of the types:" + DenyExt);
if (!window.addEventListener) {
//IE 关键代码在这里!!!
//方法一(此方法最佳!):
obj.outerHTML+='';
//方法二:
// var newObj= obj.cloneNode(true);
// newObj.value=''; // 设置新控件value为空
// obj.parentNode.replaceChild(newObj, obj);
} else {
//非IE
obj.value = "";
return false;
}
}
}
</script>
<title>无标题文档</title>
</head>
<body>
<span id="attachments_span">
<input type="file" name="myfile" onchange="CheckUpLoadFile(this);">
</span>
</body>
</html>
2、file控件由JS动态生成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function addUploadField(name, parentId) {
var f = document.createElement("input");
f.type = "file";
f.name = name;
if (window.addEventListener) { // Mozilla, Netscape, Firefox
f.addEventListener("change", function() {
CheckUpLoadFile(f, parentId);
}, false);
} else { // IE
f.attachEvent('onchange', function() {
CheckUpLoadFile(f, parentId);
});
}
f.size = 30;
p = document.getElementById(parentId);
p.appendChild(document.createElement("br"));
p.appendChild(f);
}
function CheckUpLoadFile(obj) {
DenyExt = "exe|cmd|jsp|php|asp|aspx|html|htm";
if (obj.value == "") {
return false;
}
var FileExt = "";
FileExt = obj.value.substr(obj.value.lastIndexOf(".") + 1).toLowerCase();
if (DenyExt.indexOf(FileExt) != -1) {
alert("You can't upload the file of the types:" + DenyExt);
if (!window.addEventListener) {
//IE 关键代码在这里!!!
obj.select();
document.execCommand('Delete');
obj.blur();
//obj.outerHTML+=''; 此方法虽然很安全,但可惜在此不能使用
return false;
} else {
//非IE
obj.value = "";
return false;
}
}
}
</script>
<title>无标题文档</title>
</head>
<body>
<span id="attachments_span">
<input type="button" name="add" onclick="addUploadField('myFile' ,'attachments_span');" value="Add" />
</span>
</body>
</html>
file.select();
document.execCommand('Delete');
其他的方法会或多或少的引发一些其他的副作用!
比如:重写innerHTML方法,会引起,再此file域上的事件失效!
调用activex控件会遇到安全性问题!
我写的这个方法最简单,最好用!
///上传图片
function imageShow(e)
{
if(getFileType(e.value))
{
if(getFileSize(e.value))
{
var imageId="image"+e.id;
//IE
if (!window.addEventListener)
{
document.getElementById(imageId).src=e.value;
}
else //非IE
{
document.getElementById(imageId).src=e.files.item(0).getAsDataURL();
}
}
}
else
{
if (!window.addEventListener)
{
e.outerHTML+='';
}
else
{
//非IE
e.value = "";
return false;
}
}
}
//判断上传图片的大小
function getFileSize(filePath)
{
var image=new Image();
image.dynsrc=filePath;
if(image.fileSize<5*1024*1024)
{
return true;
}
if(image.fileSize==undefined)
{
return true;
}
return false;
}
//判断上传图片类型
function getFileType(filePath)
{
var type=(filePath.substr(filePath.lastIndexOf("."))).toLowerCase();
if(type!=".jpg" && type!=".gif" && type!=".jpeg" && type!=".png" && type!=".bmp")
{
alert("您上传图片的类型不符合(.jpg|.jpeg|.gif|.png)!");
return false;
}
return true;
}
来自:http://hi.baidu.com/zhifeng_mo/blog/item/096544bd5e90a20419d81f3b.html
分享到:
相关推荐
在JavaScript(JS)中,处理`<input type="file">`元素时,用户通常会选择一个或多个文件,然后这些文件的信息会被保存在`FileList`对象中。然而,清空用户选择的文件内容并不是一件直观的事情,因为浏览器出于安全...
标题中提到的“清空input类型为file的value属性值的方法”,涉及到JavaScript在操作DOM时遇到的特性。在Web开发中,`value`属性用于获取或设置表单元素的值。对于`file`类型的`<input>`元素,它的值是一个路径字符串...
最后,除了上述使用jQuery克隆元素清空file域的方法,还有其他一些方式,例如直接使用`file.val("")`来尝试清空file域的值,但这种方法在不同的浏览器中可能会有兼容性问题。在实践中,应当测试不同的浏览器以确保...
本文实例讲述了javascript清空table表格的方法。分享给大家供大家参考。具体如下: 1. 通常方法 循环table的rows,然后一个一个删除。 这个方法是通常的方法,可行,但是效率不好。 2. 另一个方法 var artTable = ...
本篇文章介绍了几种用JavaScript清空File控件的路径值的方法,并分析了这些方法的适用场景和浏览器兼容性。 首先,一种常见的方法是创建一个新的form元素,把File控件移动到这个新form中,然后调用reset方法。由于...
总之,Cookie.js作为一款小巧且功能强大的JavaScript库,为处理浏览器cookie提供了一种简便易用的解决方案。其小巧的体积、无依赖的特性,以及丰富的API接口,使其成为开发者处理cookie问题的首选工具。在压缩后的...
本文介绍了几种使用JavaScript清除浏览器缓存的方法,包括使用meta标签、表单临时缓存清理、利用AJAX请求更新缓存、应用随机数或时间戳以及后端脚本清除浏览器缓存。 1. 使用meta标签清除缓存 开发者可以通过在HTML...
而第三种方法则需要较高的技术实现复杂度,并且在不同的浏览器中可能有不同的表现。 文章中还提到了通过触发`onchange`事件的方式,即在文件选择器选择新文件后自动清除之前的默认值,这要求对用户的行为有一定的...
在JavaScript(简称JS)中,清空表单标签通常是网页交互中常见的操作,尤其是在用户提交数据后重置表单或者在某些动态事件触发时需要清除输入的值。本篇文章将详细探讨如何使用JavaScript来实现这一功能,以及相关...
### 清空集合内容的几种方法 在软件开发过程中,集合是经常被使用的数据结构之一。集合能够存储多个数据项,并提供多种操作方法,如添加、删除和查找等。当需要清空集合中的所有元素时,不同的编程语言提供了不同的...
尽管这两种方法在某些情况下可以清空文件输入框,但它们的兼容性并不一致。由于`document.selection`在某些现代浏览器中已被弃用,因此第一种方法可能在IE之外的浏览器中失效。而第二种方法虽然在大多数现代浏览器中...
请注意,不同的浏览器可能有不同的行为,因此可能需要结合多种方法来达到最佳效果。同时,应该始终关注浏览器的更新,以确保这些对策的有效性。在设计登录表单时,用户的安全性和隐私应当是首要考虑的因素。
本文将详细介绍几种主流浏览器(360安全浏览器、Chrome浏览器、Firefox火狐浏览器、IE11浏览器、Edge浏览器)清空缓存的具体步骤。 #### 二、360安全浏览器 1. **打开菜单**:首先,找到浏览器右上角的“打开菜单”...
此外,这种方法可能受到浏览器兼容性的影响,不同的浏览器可能会有不同的渲染结果,因此在实际应用中需要进行充分的跨浏览器测试。总的来说,尽管JavaScript无法直接操作File控件的值,但我们可以通过巧妙的DOM操作...
本文将详细介绍三种实现清空文件类型input元素值的方法,分析它们在不同浏览器中的兼容性、优缺点,并提供一个综合方案的代码示例。 ### 方法一:设置value属性为空 这种方法简单直接,通过将input元素的value属性...
通过上述分析可以看出,使用JavaScript自定义函数来清空页面上的文本框是一种实用且灵活的方法,尤其适用于那些不适合使用标准`reset`方法的场景。通过合理的代码设计和逻辑优化,可以使得该功能更加健壮、高效。
360极速浏览器清空缓存方法 在使用360极速浏览器时,缓存的累积可能会影响浏览器的性能和安全性,因此清空缓存是非常必要的。下面将详细介绍360极速浏览器清空缓存的方法。 首先,打开360极速浏览器,然后点击右上...