JavaScript files.length 在 ie9 中不起作用需要替代方法

JavaScript files.length not working in ie9 need alternative approach

本文关键字:方法 不起作用 files length ie9 JavaScript      更新时间:2023-09-26

我有以下JavaScript函数,它在Internet Explorer 9中声明变量filesattached的行上失败。

function VesselDetails() {      
    insurancestart = $('#ctl00_ContentPlaceHolder1_datetimepickerinsstart').val();
    insuranceend = $('#ctl00_ContentPlaceHolder1_datetimepickerinsend').val();
    filesattached = $("input:File")[0].files.length;  
    //set up JS objects
    $('#ctl00_ContentPlaceHolder1_datetimepickerinsend').datetimepicker({ format: 'd/m/Y H:i a' });
    $('#ctl00_ContentPlaceHolder1_datetimepickerinsstart').datetimepicker({ format: 'd/m/Y H:i a' });
    //subscribe to change events
    $('#ctl00_ContentPlaceHolder1_datetimepickerinsstart').change(function () {
        insurancestart = $("ctl00_ContentPlaceHolder1_datetimepickerinsstart").val();
    });
    $('#ctl00_ContentPlaceHolder1_datetimepickerinsend').change(function () {
        insuranceend = $("ctl00_ContentPlaceHolder1_datetimepickerinsend").val();
    });
    $("input:File").change(function () {
        filesattached = $("input:File")[0].files.length;
    });
    ins_client();
}

ins_client方法如下所示:

function ins_client(sender, e) {
    if (pagemode == 'EditVessel') {
        e.IsValid = true;
    }
    if (pagemode == 'NewVessel') {
        if (insurancestart !== '' && insuranceend !== '' && filesattached > 0) {
            e.IsValid = true;
        }
        else {
            e.IsValid = false;
        }
    }
}

这一切都在 chrome 和 ie 11 中运行良好,但长度属性返回 ie 9 的未定义。我使用长度是因为我只希望在提交文档后该页面对新船请求有效,是否有另一种方法可以做到这一点,可以在 ie 9 及以上和 chrome 中工作,抱歉,如果这已经在其他地方得到回答,但我在任何地方都找不到解决方法,使其能够以相同的方式继续工作,但在 ie9 以后和 chrome 中。

我替换了:

filesattached = $("input:File")[0].files.length;  

跟:

var areFilesAttached = document.getElementById('ctl00_ContentPlaceHolder1_fuAttachment').value ? true : false;

VesselDetails函数内。

然后将ins_client内的if语句替换为以下内容:

if (pagemode == 'NewVessel') {
        if (insurancestart !== '' && insuranceend !== '' && areFilesAttached == true) {
            e.IsValid = true;
        }
        else {
            e.IsValid = false;
        }
    }

这是一种替代方法,它使我能够在不使用与IE9不兼容的 files.length 属性的情况下检查是否提供了文件。

怕这无法实现,IE9不支持HTML5文件API,因此它为文件属性返回未定义的值。

看看文件 API