4
$('.myElem').live('click', function() { 
    $(this).hide(500, function() { 
     $(this).siblings('.myOtherElem').show(); 
    }); 
}); 

Вышеупомянутое не работает, потому что $(this) больше не в правильной области в обратном вызове. Как передать исходный исходный элемент в обратный вызов?jQuery получить исходный элемент в обратном вызове

ответ

7

На самом деле ваш код должен работать.

Чтобы получить доступ к this в пределах внутреннего яваскрипта метода вы можете сохранить ссылку на внешней области видимости методы:

$('.myElem').on('click', function() { 

    var myElem = this;  
    $(this).hide(500, function() { 
     $(myElem).siblings('.myOtherElem').show(); 
    }); 

}); 

Однако в большинстве методов JQuery this имеет в виде селектора или элемент, используемый:

$('.myElem').on('click', function() { 
    // This refers to the clicked element 
    $(this).hide(500, function() { 
     // This refers to the clicked element as well 
     $(this).siblings('.myOtherElem').show(); 
    });  
}); 
2
$('.myElem').live('click', function() { 
    var $this = $(this); 
    $this.hide(500, function() { 
     $this.siblings('.myOtherElem').show(); 
    }); 
}); 
0
$('.myElem').live('click', function() { 
    $(this).hide(500); 
    $(this).siblings('.myOtherElem').show(); 
}); 
+0

Это не будет выполнено то же самое. Помещение вызова '.show()' в обратном вызове гарантирует, что оно не произойдет, пока анимация '.hide()' не будет завершена. Код в вашем ответе заставит их оба произойти почти одновременно. –

+0

Вы можете сделать это, используя 'delay':' .delay (500) .show (1) 'Однако использование обратного вызова' show' - лучшее решение. – jantimon

Смежные вопросы