Загрузка файла jQuery после загрузки страницы - PullRequest
4 голосов
/ 02 февраля 2010

У меня есть страница, которая загружает форму HTML через запрос $ .ajax.

Форма имеет опцию загрузки файла. Я пробовал несколько плагинов для загрузки Ajax, и все они требуют от меня создания некоторого объекта типа ajaxUpload (), который внутренне создает прослушиватель щелчков. Однако эти слушатели не запускаются, потому что динамически загружаемая форма недоступна для DOM.

Чтобы обойти такие вещи в прошлом, я использовал live () для прослушивания. Но я не могу объявить эти экземпляры ajaxUpload как живое событие. Так как же заставить эту кнопку загрузки работать?

Ответы [ 7 ]

1 голос
/ 03 февраля 2010

Что вы имеете в виду, что форма недоступна в DOM после того, как вы загрузили ее с помощью ajax? Почему бы и не быть?

$.get(url_that_has_form, null, function(resp) {
    $('#some_container').html(resp);
    // Now the form is part of the document.
    // Run your ajax upload stuff here.
    new AjaxUpload('#id_of_form_you_just_added', options);
}, 'html');
1 голос
/ 02 февраля 2010

AJAX не может загрузить файл. jQuery-плагины для форм с использованием скрытого метода iframe для загрузки файла. Для реальной загрузки AJAX вы можете использовать загрузчик на основе Flash. Я рекомендовал вам попробовать загрузить .

1 голос
/ 02 февраля 2010

Я, кажется, откуда-то вспоминаю, что плагин livequery может обрабатывать подобные вещи. В своем стремлении к истине я наткнулся на это:

Проблема с привязкой в ​​jQuery для скопированных элементов

0 голосов
/ 07 апреля 2011

@ Лоуренс спасибо, я столкнулся с той же проблемой, после загрузки html как части формы, сопутствующей загрузки элементов, я должен нажать дважды Хотя я пробовал много способов перепривязать дескриптор клика после загрузки HTML, но не получилось.

В конце страницы я прочитал это $ (Это) .trigger ( "щелчок"); и я изменяю его так, чтобы он подходил мне и помещал в конце вызова ajax, и это работает. JQuery ( "# загрузки") триггер ( "щелчок"). Ура... Спасибо всем телом.

0 голосов
/ 08 февраля 2011

Я решил это с помощью другого плагина загрузки https://github.com/valums/file-uploader

, которая позволяет мне вызывать функцию для создания загрузчика из элемента DOM в любое время. Поэтому я могу вызывать функцию только тогда, когда мне нужен загрузчик. Таким образом, мне не нужно полагаться на живые события.

0 голосов
/ 02 февраля 2010

Вот лучшее, что мне удалось сделать:

$('#uploadButton').live('click', function(){                
    new AjaxUpload('uploadButton', {
       action: 'upload-handler.php',
       onComplete: function(file, response){
        alert(response);
       });
});

live () работает, но создает объект только после щелчка. Поэтому мне нужно щелкнуть его еще раз, чтобы сработал триггер загрузки.

Итак, я пытался как-то убрать лишний клик. Я надеялся, что следующее будет работать в конце функции, но это не так:

$(this).trigger("click");
0 голосов
/ 02 февраля 2010

Не могли бы вы добавить динамически загруженную форму в документ? (затем создайте экземпляр ajaxUpload объекта '' после '' формы, добавленной в документ)

...