input标签file的value属性IE兼容性问题

时间:2023-03-08 22:38:41
input标签file的value属性IE兼容性问题

在IE中input标签file的value属性是只读的,不能通过js来改变,如下代码在IE中就是无效的:

var input = document.getElementById('file');
input.value = '';

所以当在file中上传了同一张图片时,是不会触发file的change事件的。
但在其他浏览器里就可以轻易的使用js改变value值,使上传同一图片时触发change事件。
为了解决这个问题就要在每次图片上传完成后删除掉这个input再重新生成一个input插入到DOM中,大概的代码如下:

resetFile = function(ele, form, name, str){
    var parent = ele.parentNode;
    var input = $C('input');
    input.type = 'file';
    input.className = 'file';
    input.name = str;
    input.id = str;
    parent.removeChild(ele);
    parent.appendChild(input);
    nodes[name] = input;
    Core.Events.addEvent(nodes[name],function(){
        var imgvalue = ele.value;
        if(imgvalue != ''){
            form.submit();
        }
    },'change');
};

(此代码引用于blog7icp的blog7icp/jobs/bankcardbind.js)
注意:在生成新的input之后要重新绑定change事件,之前绑定的change事件已经跟随着被删除的input删除了。