1

我通过 Chrome 和 Firefox 运行了这段代码,它运行良好。每当我通过 Internet Explorer 运行它以进行测试时,它都不起作用。我检查了 javascript 领事,我得到:SCRIPT5007: Unable to get value of the property '0': object is null or 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.');
        }
    }
});
4

3 回答 3

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

在您的事件处理程序中,jQuerythis生成注册处理程序的 DOM 元素。该元素没有定义的files属性,或者该属性的值为nullundefined

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

if ($('#audiofile1')[0].files) {
    $('#audiofile1').bind('change', function () {
        // ...
    });
}
于 2013-01-19T07:43:47.840 回答
0

显然,IE 仅支持从版本 10 开始的 HTML5 File API。 因此,在 IE 9 中,根本没有.files可以访问的属性。

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

于 2013-01-19T07:49:01.960 回答
0

尝试打开 Jquery UI 对话框时出现此(相同/类似)错误:SCRIPT5007:无法获取属性“_focusTabbable”的值:对象为空或未定义。

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

a) + b) > c)

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

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

于 2013-03-07T21:48:41.533 回答