Internet Explorer,我的开发生活的祸根,再次拒绝做其他浏览器似乎毫不费力的事情。我试图清除浏览代码/值,如果用户选择不允许的文件类型。适用于FF但不适用于IE 9.谢谢
<script type="text/javascript">
<!--
extArray = new Array(".jpg", ".png");
function LimitAttach(form, file) {
allowSubmit = false;
if (!file) return;
while (file.indexOf("\\") != -1)
file = file.slice(file.indexOf("\\") + 1);
ext = file.slice(file.indexOf(".")).toLowerCase();
for (var i = 0; i < extArray.length; i++) {
if (extArray[i] == ext) {
allowSubmit = true;
break;
}
}
if (allowSubmit) {
return true;
} else {
alert("Please only upload files that end in types: "
+ (extArray.join(" ")) + "\nPlease select a new "
+ "file to upload and submit again.");
document.getElementById('photobrowser').value = "";
return false;
}
}
-->
</script>
<form action="process.php" method="POST" enctype="multipart/form-data" name="formUpload">
<label>Picture:</label>
<input type="file" name="photo" id="photobrowser" onchange="return LimitAttach(formUpload, formUpload.photo.value)" tabindex="4">
<input type="hidden" name="subphoto" value="<?php echo $newCount ?>" />
<input type="image" src="styling/images/button-add-photo.png" id="subBtn" tabindex="6" />
</form
答案 0 :(得分:1)
浏览器对文件输入的限制差别很大。文件输入允许用户与其文件系统中的文件交互并选择文件。所以所有浏览器都限制JS自动选择文件。 IE进一步禁止改变输入选择,甚至是空字符串。这实际上是有道理的,因为如果您不允许选择给定文件,为什么要允许您更改它?
而且,不是在JS中验证它,而应该验证后端的文件。前端验证对于易用性是可以接受的,但即使它已经到位,也应始终进行后端验证。用户可以简单地关闭JS,使用像firebug这样的东西来改变它,甚至(有时)将文件下载到本地机器,更改它,然后用它来提交到你的网站。
答案 1 :(得分:0)
您是否尝试将this
传递给JS方法,而不是通过ID找到它?:
onchange="return LimitAttach(this, this.value);"
JavaScript的:
function LimitAttach(input, file) {
allowSubmit = false;
if (!file) return;
while (file.indexOf("\\") != -1)
file = file.slice(file.indexOf("\\") + 1);
ext = file.slice(file.indexOf(".")).toLowerCase();
for (var i = 0; i < extArray.length; i++) {
if (extArray[i] == ext) {
allowSubmit = true;
break;
}
}
if (allowSubmit) {
return true;
} else {
alert("Please only upload files that end in types: "
+ (extArray.join(" ")) + "\nPlease select a new "
+ "file to upload and submit again.");
input.value = "";
return false;
}
}
修改强>
这是一种黑客行为,但你可能想试一试:
function checkImg(val){
var dgr = val.value;
dgr = dgr.substr(dgr.length-4, dgr.length)
dgr = dgr.toLowerCase();
if (dgr =='.jpg' || dgr == 'jpeg' || dgr== '.gif'){
alert('image');
}else{
alert('not image');
var objD = document.forms['form1'].divR;
objD.innerHTML = '';
objD.innerHTML = '<input id="uImg" name="uImg" type="file" class="defText" style="font-size: 10pt" onchange="javascript: checkImg(this);" size="30">';
}
}
<form name="form1" id="form1" method="post">
<div id="divR" name="divR">
<input id="uImg" name="uImg" type="file" class="defText" style="font-size: 10pt" onchange="javascript: checkImg(this);" size="30">
</div>
</form>