在.9中工作的JavaScript files.length需要替代方法

时间:2014-11-18 14:10:31

标签: javascript jquery internet-explorer

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

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但是长度属性返回未定义的即9。我使用长度因为我只希望页面在提交文档后对新的船只请求有效,有没有另外一种方法可以在9开始和chrome工作,如果已经在其他地方已经回答道歉,但我无法在任何地方找到一个解决方法,使其能够以相同的方式继续工作,但在ie9以及chrome。

2 个答案:

答案 0 :(得分:1)

我换了:

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

使用:

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

VesselDetails函数中。

然后使用以下内容替换if内的ins_client语句:

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

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

答案 1 :(得分:0)

我担心无法实现,IE9不支持HTML5文件API,因此会返回文件属性的未定义值。

查看FILE API