我有以下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。
答案 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