Я хотел бы, чтобы функция обратного вызова запускалась после события click. В настоящее время у меня есть JavaScript
$('#btnSubmit').click(function ()
{
$('#testDiv').hide('slow', onComplete('test'));
});
var onComplete = function (t)
{
$('#hiddenDiv').hide();
alert(t);
}
Функция обратного вызова должна быть #testDiv
после скрытия #testDiv
. Однако сначала запускается функция onComplete. Если я удалю параметры на onComplete и просто даю ссылку, а не вызываю ее, то функция срабатывает в нужное время, но я не могу передать ей параметры. Как я могу передать параметры onComplete и не запускать его перед тем, как div завершит скрытие?
скрипка здесь
У вас на самом деле есть анонимная функция, обертывающая ваш onComplete()
:
$('#btnSubmit').click(function () {
$('#testDiv').hide('slow', function () {
onComplete('test')
});
});
В jQuery docs:
полный
Тип: Функция()
Функция для вызова после завершения анимации.
При добавлении onComplete()
без функции обмотки функция будет вызываться немедленно, иначе вам нужно ссылаться только на onComplete
, но тогда вы не сможете передать свое значение, если вы не используете .bind()
для передачи вашего параметра.
Использовать анонимную функцию:
$('#btnSubmit').click(function () {
$('#testDiv').hide('slow', function () {
onComplete('test')
});
});
Вы можете использовать .bind()
:
$('#testDiv').hide('slow', onComplete.bind(null, 'test'));
Первый параметр - это значение, которое this
будет иметь в функции onComplete
. Все остальные параметры - список аргументов.
this
в функции onComplete
.
$('#testDiv').hide('slow', onComplete);
, передавая ссылку на функцию обратного вызова, а не выполняя ее.