Uploadify (uploadifySettings, uploadifyUpload) не работает в IE - PullRequest
2 голосов
/ 09 ноября 2011

Задача:

Uploadify используется для загрузки файлов на сервер.Это сделано потому, что должен быть индикатор выполнения при загрузке и проверка перед загрузкой для типа файла и размера.

Я использую uploadifySettings -Metod, чтобы добавить некоторые дополнительные параметры к запросу.Это другие формы ввода.Все это прекрасно работает с FireFox.

Вызов функции:

this.$uploadifyInputButton.uploadifySettings(
    'scriptData', {'description': description, 'parentFolder': parentFolder}
);
//parent Folder is an ID. This has nothing to do with the folder option in uploadify

Проблема:

Когда я тестирую сIE это не работает.

Сведения об ошибке веб-страницы:

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;...)
Timestamp: Wed, 9 Nov 2011 11:49:52 UTC

Message: Object doesn't support this property or method
Line: 264
Char: 17
Code: 0

Message: Object doesn't support this property or method
Line: 264
Char: 17
Code: 0

Эти сообщения указывают на следующую строку в загруженной распакованной библиотеке:

returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);

Тестирование

Когда я использую Инструменты разработчика и проверяю селектор document.getElementById(jQuery(this).attr('id') + 'Uploader'), это относится к объекту-элементу (Тип DispHTMLObjectElement).Так что должно быть правильно?

Связано

Когда я использую метод uploadifyUpload, я получаю похожую ошибку.


Полная функция библиотеки:

    uploadifySettings:function(settingName, settingValue, resetObject) {
        var returnValue = false;
        jQuery(this).each(function() {
            if (settingName == 'scriptData' && settingValue != null) {
                if (resetObject) {
                    var scriptData = settingValue;
                } else {
                    var scriptData = jQuery.extend(jQuery(this).data('settings').scriptData, settingValue);
                }
                var scriptDataString = '';
                for (var name in scriptData) {
                    scriptDataString += '&' + name + '=' + scriptData[name];
                }
                settingValue = escape(scriptDataString.substr(1));
            }
            returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);
        });
        if (settingValue == null) {
            if (settingName == 'scriptData') {
                var returnSplit = unescape(returnValue).split('&');
                var returnObj   = new Object();
                for (var i = 0; i < returnSplit.length; i++) {
                    var iSplit = returnSplit[i].split('=');
                    returnObj[iSplit[0]] = iSplit[1];
                }
                returnValue = returnObj;
            }
        }
        return returnValue;
    },

Загрузка конфигурации

        this.$uploadifyInputButton.uploadify({
            'auto'              : false,
            'buttonImg'         : '/img/dateiupload.gif',
            'cancelImg'         : '/scripts/uploadify/cancel.png',
            'fileDataName'      : 'file',
            'fileExt'           : '*.pdf;*.xls;*.doc;*.ppt;*.png;*.jpg',
            'height'            : 25,
            'multi'             : false,
            'queueID'           : 'uploadifyQueue',
            'queueSizeLimit'    : 1,
            'script'            : '/scripts/uploadify/uploadify.php',
            'scriptData'        : null,
            'sizeLimit'         : 10485760,
            'uploader'          : '/scripts/uploadify/uploadify.swf',
            'width'             : 122,
            'onAllComplete'     : function(event, queueID, fileObj, response, data) {
                $.colorbox.close();
            },
            'onSelect'          : function(event,ID,fileObj) {
                that.$uploadifyInputName.val(fileObj.name);
            },
            'onCancel'          : function(event,ID,fileObj,data){
                that.$uploadifyInputName.val('');
            },
            'onClearQueue'      : function(event){
                that.$uploadifyInputName.val('');
            }

          });              
...