Как установить параметры динамически для AjaxUpload? - PullRequest
2 голосов
/ 18 августа 2011

Я создал функцию для загрузки файла с использованием этой библиотеки следующим образом:

new AjaxUpload($('#addImage'), {
                action: 'SaveDataBank.aspx',
                name: 'uploadimage',
                dataType: 'json',
                params: { clientid: GetSelectedClient() }
                onSubmit: function (file, ext) {
                },
                onComplete: function (file, response) {
                }
            });

Я хотел бы выполнить некоторую задачу перед открытием диалогового окна файла.Как я могу обновить приведенный выше код?

ОБНОВЛЕНИЕ:

Я хотел бы динамически передать параметр при загрузке файла.У меня есть раскрывающийся список, содержащий список идентификаторов клиентов.Если я нажму кнопку «Загрузить», откроется диалоговое окно «Файл».Затем я хотел бы передать выбранный клиент из выпадающего списка.В настоящее время он передает только изначально выбранное значение.

params: { clientid: GetSelectedClient() },

Вышеуказанная строка не работает согласно моему требованию.

Ответы [ 4 ]

7 голосов
/ 18 августа 2011

Первая идея (которая не работает)

Попробуйте привязать обработчик кликов к кнопке. Если вы не вернете false или не остановите распространение, то после запуска обработчика кликов будет запущен загрузчик файлов:

$('#addImage').click(function(){
    // code here
});

new AjaxUpload($('#addImage'), {
                action: 'SaveDataBank.aspx',
                name: 'uploadimage',
                dataType: 'json'
            });

Это не работает, потому что библиотека AjaxUpload создает элемент ввода, который она помещает поверх кнопки при наведении курсора на кнопку. На самом деле вы нажимаете элемент ввода.

Работа вокруг

Привязать к событию click входа, на котором вы фактически нажимаете. Это не существует при загрузке страницы, поэтому мы должны использовать функцию jQuery live :

new AjaxUpload($('#addImage'), {
                action: 'SaveDataBank.aspx',
                name: 'uploadimage',
                dataType: 'json'
            });

$('input[type="file"]').live('click', function(e){
    // code here
});

См. мой обновленный скрипт для рабочего примера.

Передача динамических данных

Чтобы передать динамические данные вместе с загрузкой файла, добавьте вызов setData в обработчик onSubmit:

new AjaxUpload($('#addImage'), {
            action: 'SaveDataBank.aspx',
            name: 'uploadimage',
            dataType: 'json',
            onSubmit: function (file, ext) {
                this.setData({clientid: GetSelectedClient()});
            }
        });

Выводы

Это показывает, что с библиотекой немного неудобно работать. Вы не нажимаете кнопку, поэтому вы не получите нормальных эффектов кнопки (то есть она становится с отступом, когда мышь нажата). Любой JavaScript, который использует события кнопки, не будет работать должным образом. Вы можете пойти с вышеупомянутым решением, но лично я бы искал другую библиотеку. Может быть более новый, который заменит это ? Вот еще куча других и еще немного .

0 голосов
/ 12 декабря 2013

сначала вы можете установить глобальный объект:

AjaxUploadObj=new AjaxUpload($('#addImage'), {
               action: 'SaveDataBank.aspx',
               name: 'uploadimage',
               dataType: 'json',
               params: { clientid: GetSelectedClient() }
               onSubmit: function (file, ext) {
               },
               onComplete: function (file, response) {
               }
           });

затем вы можете изменить значение свойства через AjaxUploadObj._settings

например: AjaxUploadObj._setting.action = "http://mustrank.com/dosomething.php"

0 голосов
/ 13 ноября 2012

Согласно документации , для вас должно работать следующее:

onSubmit : function(id, fileName){
    var delete=$("#check-delete-previous").is(":checked");
    this.setParams({ "deletePrevious" : delete });
},

Убедитесь, что вы используете последнюю версию, так как более старые версии могут неправильно устанавливать функции обратного вызова.

Edit: На самом деле, следующее работало только для меня:

onSubmit : function(id, fileName){
    var delete=$("#check-delete-previous").is(":checked");
    this.params.deletePrevious = delete;
},
0 голосов
/ 18 августа 2011

попробуй:

$('#addImage').mousedown(function(){
    //code here
});

Или

$('#addImage').bind('mousedown',function(){
    //code here
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...