Передача параметров в обратные вызовы JavaScript

0

Я хотел бы, чтобы функция обратного вызова запускалась после события click. В настоящее время у меня есть JavaScript

 $('#btnSubmit').click(function ()
            {
                $('#testDiv').hide('slow', onComplete('test'));
            });


            var onComplete = function (t)
            {
                $('#hiddenDiv').hide();
                alert(t);
            }

Функция обратного вызова должна быть #testDiv после скрытия #testDiv. Однако сначала запускается функция onComplete. Если я удалю параметры на onComplete и просто даю ссылку, а не вызываю ее, то функция срабатывает в нужное время, но я не могу передать ей параметры. Как я могу передать параметры onComplete и не запускать его перед тем, как div завершит скрытие?

скрипка здесь

  • 0
    try $('#testDiv').hide('slow', onComplete); , передавая ссылку на функцию обратного вызова, а не выполняя ее.
Теги:
callback

3 ответа

2
Лучший ответ

У вас на самом деле есть анонимная функция, обертывающая ваш onComplete():

$('#btnSubmit').click(function () {
    $('#testDiv').hide('slow', function () {
        onComplete('test')
    });
});

Демо здесь

В jQuery docs:

полный
Тип: Функция()
Функция для вызова после завершения анимации.

При добавлении onComplete() без функции обмотки функция будет вызываться немедленно, иначе вам нужно ссылаться только на onComplete, но тогда вы не сможете передать свое значение, если вы не используете .bind() для передачи вашего параметра.

  • 0
    Можете ли вы объяснить, почему у вас должна быть эта анонимная функция для вызова onComplete, и вы не можете просто вызвать onComplete напрямую?
  • 1
    @wootscootinboogie Потому что вы не можете передать ссылку на функцию с прикрепленными параметрами.
1

Использовать анонимную функцию:

$('#btnSubmit').click(function () {
   $('#testDiv').hide('slow', function () { 
      onComplete('test') 
   });
});
1

Вы можете использовать .bind():

$('#testDiv').hide('slow', onComplete.bind(null, 'test'));

Первый параметр - это значение, которое this будет иметь в функции onComplete. Все остальные параметры - список аргументов.

  • 0
    Почему первый параметр в bind null, а не неопределенный?
  • 0
    @wootscootinboogie Не имеет значения, какой будет первый параметр, если вы не используете this в функции onComplete .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню