在IE8中上传错误

时间:2010-10-07 01:14:15

标签: jquery internet-explorer-8 uploadify

我无法在IE8中使用uploadify(jQuery插件),它可以在所有其他浏览器中正常工作。

当我上传文件时,我收到此错误:

Object不支持此属性或方法

这是在uploadify.js中的这一行:

document.getElementById(jQuery(this).attr('id') + 'Uploader').startFileUpload(ID, false);

我无法理解。

JavaScript看起来像这样:

<script type="text/javascript">
$(document).ready(function() {
var scriptData;

$.get('/lib/upload_params.php', {'key': "files/<?=random?>/"},
    function(data) {
        scriptData = {
            'AWSAccessKeyId': data.AWSAccessKeyId,
            'key': encodeURIComponent(data.key),
            'acl': "private",
            'policy': encodeURIComponent(data.policy),
            'signature': encodeURIComponent(encodeURIComponent(data.signature)),
            'success_action_status': "201",
            'folder':'',
            'Filename':''
        };
        //    $('#file').uploadifySettings('scriptData',scriptData);
        start_uploadify();
              },
    "json" ); 

function start_uploadify() {
    $('#file').uploadify({
        'uploader'      : 'http://domain.com/lib/uploadify/uploadify.swf',
        'script'        : 'http://cdn.domain.com',
        'multi'         : false,
        'buttonImg'     : 'http://domain.com/images/select_button.png',
        'rollover'      : true,
        'width'         : '131',
        'height'        : '40',
        'sizeLimit'     : '1073741824',
        'auto'          : false,
        'method'        : 'post',
        'scriptData'    : scriptData,  
        'scriptAccess'  : 'always',
        'wmode'         : 'transparent',
        onSelect        : function(event, queueID, fileObj) {
                            $('#send_options').show().addClass('on');
                            $('#fileUploader').css('visibility', 'hidden');
                            $('#fileQueue').css({'margin-top' : '-40px', 'visibility' : 'visible'});
                          },
        onComplete      : function(event, queueID, fileObj, response, data) {
                            //alert(fileObj.name);
                            $('#upload_progess').html("<strong>Upload complete</strong><br />We are now processing your file...");
                            $('#fn').val(fileObj.name);
                            $('#fs').val(fileObj.size);
                            $('#form_1').submit();
                           },  
        'onError'       : function(e, queueID, fileObj, errorObj){
                            //alert( dump(scriptData) );
                            if(errorObj.info == 201){
                              //$('#file'+queueID).remove();
                            } else {
                              alert(errorObj.type+' error:'+errorObj.info+'. Sorry! (try again later)');
                            }
                          },
        'folder'        : '',
        'fileDataName'  : 'file'
    });
}

$('#send').live('click', function() {
    $('#file').uploadifyUpload();
    $('#send_options').hide();
    $('#upload_progress').show();
});

$('#change_file').live('click', function() {
    $x = $('#send_options');
    $y = $('#fileUploader');
    $z = $('#fileQueue');

    if ($x.hasClass('on')) {
        $x.removeClass('on').hide();
        $y.css('visibility', 'visible');
        $z.css('visibility', 'hidden');
    } else {
        $x.addClass('on');  
    }
});

$('#method_2').delegate('', 'click', function() {
    $('.wrap_to').show();                                             
});

$('#method_1').delegate('', 'click', function() {
    $('.wrap_to').hide();                                         
});

});

4 个答案:

答案 0 :(得分:1)

不确定这是否会对您有所帮助,但我刚遇到一个可能与之相关的奇怪的IE8错误。如果你有一个名为“change_file”的函数并且有一个类似<a onclick="change_file()">的链接,那么在包含<input name="change_file">的表单中你会得到“对象不支持这个属性或方法”的错误,那就是哦 - 所以无益的。

嗯,刚刚对此进行了一些挖掘,看来它不仅仅是“change_file”它不喜欢,它是js函数名称和放大器中的任何重叠。输入名称。这实际上更有意义,当它试图找出什么是“change_file”时,它必须首先查看表单元素,然后找到表单元素,但后来无法弄清楚为什么你要把它当作对待一个功能。

那么,也许你有一个名为“jQuery”的输入? (可能是“jQuery(this).attr('id')”。我尝试了一个名为“document”的文件,但它找到了正常的文档就好了。)

答案 1 :(得分:1)

删除此行:

 $('#fileUploader').css('visibility', 'hidden');

为我解决了这个问题。我假设IE在设置为“隐藏”之后无法再找到该元素。

答案 2 :(得分:0)

这一行看起来很可疑:

  $('#fileUploader').css('visibility', 'hidden');

尝试更改为

  $('#fileUploader').css({'visibility': 'hidden'});

答案 3 :(得分:0)

由于某种原因,IE不喜欢var名称与jQuery对象名称相同,例如:

var field1 = $('#field1')。val();

IE不喜欢这样,所以我将var field1更改为var field1a并且它可以工作。