Загрузка файла Jquery не работает в IE - PullRequest
2 голосов
/ 14 июня 2011

Я сделал простой плагин для загрузки изображений, используя скрытый iframe. По сути, он заменяет диалоговое окно файла ссылкой, щелкнув по этой ссылке, можно открыть диалоговое окно файла, а после выбора файла загрузить его автоматически.

Это прекрасно работает в Chrome, Safari и Firefox. К сожалению, все версии IE, включая 9, отказываются отправлять файл. Диалоговое окно файла отображается очень хорошо, и если я сообщаю о значении, оно показывает выбранный файл, но событие отправки, очевидно, не сработает. Если я выберу файл с диалоговым окном реального файла, он будет работать, как и ожидалось, даже отправит файл, не нажимая кнопку отправки или что-либо еще.

Включен только соответствующий код для выполнения задач, очевидно, есть код для штук плагина jQuery и т. Д.

                   var self = this;

        var randId = Math.floor(Math.random()*1001);

        var iframeHTML = '<iframe id="iframe'+randId+'" name="iframe'+randId+'" style="visibility:hidden;height:1px;width:1px;"></iframe>';
        var formHTML = '<form method="post" enctype="multipart/form-data" encoding="multipart/form-data" action="'+settings.action+'" target="iframe'+randId+'" id="form'+randId+'" >';
        var inputHTML = '<input type="file" name="upload" id="input'+randId+'"><input type="submit" id="submit'+randId+'" value="Submit" />';

        $(this).append(iframeHTML+formHTML+inputHTML+'</form>');
        $('input#input'+randId).change(function() {
            if($(this).val() != '') {
                if(settings.spinner != '') {
                    $(settings.spinner).show('fade');
                }
            }
        $('form#form'+randId).submit();
        });

        $(settings.activator).click(function(e) {
            e.preventDefault();
            $('input#input'+randId).trigger('click');
        });     

settings.activator - ссылка, используемая для открытия диалогового окна файла.

Нужна ли мне какая-то особенная вещь для IE, чтобы это работало? Я знаю, что это должно быть возможно, потому что другие сценарии делают это, но я не слишком заинтересован в том, чтобы использовать их, потому что для моих нужд большинство из них слишком массивны и содержат множество функций. Я также не хочу использовать какие-либо решения на основе Flash.

РЕДАКТИРОВАТЬ: В настоящее время я решил эту проблему, просто показав поле ввода файла в IE и сделав соответствующие браузеры, как описано выше. Я все еще хотел бы услышать, есть ли реальные решения кроме взлома "скрытого поля ввода поверх прозрачности" для IE.

1 Ответ

1 голос
/ 14 июня 2011

Я помню, как IE7 игнорировал форму, которая отправляла целевые скрытые фреймы. Попробуйте переместить iframe из вида, а не скрывать его:

.iframe_hidden {
    width: 0;
    height: 0;
    position: relative;
    left: -9999px;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...