在IE中Javascript不清除框

时间:2011-09-29 17:02:44

标签: javascript internet-explorer

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

2 个答案:

答案 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>