2015-07-15 10 views
1

Допустим, у меня есть некоторые JavaScript следующим образом:Как вызвать функцию обратного вызова из другой функции обратного вызова

$('#bar').fileupload({ 
    baz: 2, 
    baf: 6 

    add: function(e, data){ 
     stop(e,data); 
    }, 

    stop: function(e,data){ 
     console.log('I am Called'); 
    } 

}); 

Из функции add я хочу, чтобы вызвать функцию stop в некоторых ситуациях. Проблема в том, что теперь функция stop делает не. Как я могу это сделать?

Благодаря

+0

Возможно, измените свой вызов на 'stop()' на вызов 'stop (e, data)'? –

+0

'this.stop()', но уверены ли вы, что предполагается использовать плагин? Когда вы определяете анонимную функцию, подобную этой, обычно необходимо настроить плагин, а не так, чтобы вы могли называть его вручную. У плагина есть веб-сайт, на который мы можем взглянуть? –

+0

@RoyDictus Я пробовал это, но не работал. – sanders

ответ

2

вы передаете анонимные функции FileUpload, это означает, что у вас нет никакой возможности ссылки на них, если вы не объявлять их заранее. Попробуйте объявить два обратных вызовов, прежде чем с вар, то вы должны быть в состоянии ссылаться на них

var stop = function(e,data){ 
    console.log('I am Called'); 
}; 

var add = function(e, data){ 
    stop(); 
}; 

$('#bar').fileupload({ 
    baz: 2, 
    baf: 6, // you were missing a comma here 
    add: add, 
    stop: stop 
}); 

Хотя я не уверен, почему вы должны остановить функцию add(), вызвав еще один, не может вам просто return от него?

EDIT: Как уже отмечалось, вы не должны вызывать остановки обратного вызова из оных, мой ответ был бы действительным только в более общем случае, пожалуйста, обратитесь к другим ответам или документации FileUpload к понять, как остановить загрузку.
1

Согласно documentation, вот как вы должны это сделать:

var jqXHR = null; 
jqXHR = $('#bar').fileupload({ 
    ..., 
    add: function (e, data) { 
     jqXHR.abort(); 
    }, 
    ... 
}); 
2

Метод fileuploader add представляет собой особый случай. Внутри add, data.submit() возвращается обещание jQuery (https://api.jquery.com/jQuery.ajax/#jqXHR), которое позволяет вам реагировать на различные ситуации в зависимости от состояния загрузки. Это позволит вам подключиться к пользовательской функции для разных ответов.

$('#bar').fileupload({ 
    baz: 2, 
    baf: 6, 
    add: function(e, data){ 
     data.submit() 
     .success(function(result, status, promise) { console.log('I am Called'); }); 
    } 
}); 

Вы также, кажется, с помощью обратного вызова stop странным образом. Опция Fileuploader stop - это обратный вызов, когда завершена загрузка файла - я не могу представить себе ситуацию, когда вы хотите называть это вручную. Если то, что вы хотели бы сделать, это предотвратить загрузку, вам нужно посмотреть на метод .abort(), как указано в ответе Партха Шаха.

$('#bar').fileupload({ 
    add: function(e, data){ 
     data.submit() 
     .error(function(promise, status, error) { promise.abort(); }); 
    } 
}); 
Смежные вопросы