SCRIPT5007:无法获取属性'0'的值:object为null或undefined

时间:2013-01-19 07:33:03

标签: javascript jquery internet-explorer-9 fileapi

我通过Chrome和Firefox运行此代码,效果很好。每当我通过Internet Explorer运行它以进行测试时,它都无法工作。我检查了javascript消费者,我得到了: SCRIPT5007:无法获取属性'0'的值:object为null或undefined 。有人可以告诉我为什么会出现这种情况以及我可以做些什么来解决它?

$('#audiofile1').bind('change', function () {
    if (this.files[0].type != 'image/png') {
        $('#audiofile1').each(function () {
            $(this).after($(this).clone(true)).remove();
        });
        alert(this.files[0].name + ' is not a valid file type.');
    } else {
        if (this.files[0].size > '5000') {
            $('#audiofile1').each(function () {
                $(this).after($(this).clone(true)).remove();
            });
            var size = this.files[0].size;
            var maxSize = 100;
            var exceedingSize = size - maxSize;
            alert(this.files[0].name + ' exceeds the maximum file size');
        } else {
            $("#audiofile1").fadeTo(1500, 0.20);
            alert(this.files[0].name + ' was added successfully.');
        }
    }
});

3 个答案:

答案 0 :(得分:2)

if (this.files[0].type != 'image/png') {

在事件处理程序中,jQuery使this为已注册处理程序的DOM元素。该元素没有定义的files属性,或者该属性的值为nullundefined

这是因为Internet Explorer 9及更低版本不支持File API。如果File API不可用,您应该跳过绑定处理程序:

if ($('#audiofile1')[0].files) {
    $('#audiofile1').bind('change', function () {
        // ...
    });
}

答案 1 :(得分:0)

显然,IE only supports the HTML5 File API starting with version 10.因此,在IE 9中,根本没有.files属性可供访问。

不幸的是,我不知道如何解决这个问题,除了告诉用户升级和/或为旧浏览器上的用户提供一些替代(可能是服务器端)方法来实现它是什么“干嘛在您的情况下,假设您最终将文件上传到服务器以进行进一步处理,您可以跳过不支持它们的浏览器的客户端检查,并简单地告诉您的用户将使用哪种文件接受。

答案 2 :(得分:0)

尝试打开Jquery UI对话框时出现此(相同/相似)错误: SCRIPT5007:无法获取属性'_focusTabbable'的值:object为null或undefined。

我所做的更改似乎导致了此错误......:
a)改为Jquery 1.9.1
b)更改为Jquery UI 1.10.1
c)在对话框调用中添加了'appendTo'选项。

a)+ b)> c)中

我需要做(c)因为我已经将(15)jquery对话框添加到以前将一些子表单元素设置为hide / show div元素的现有页面中。我想获得jquery对话框功能,包括模态。问题是子表单元素是由jquery通过在元素之外附加到文档来重写的,因此在提交表单时不再包括对话框中的表单字段。

无论如何,对于这个问题,是否有人有比上述更好的解决方案?