Как исчезнуть, установить значение, войти; но делай это лучше - PullRequest
4 голосов
/ 24 апреля 2011

Скажем, элемент имеет значение 55:

<span id="some">55</span>

Я хочу:

  1. затухание элемента
  2. заданное значение 44
  3. исчезать в элементе

Итак, я попробовал:

$("#some").fadeOut("slow").html("44").fadeIn("slow");

Но вышеприведенный сначала устанавливает содержимое диапазона равным 44, , а затем исчезает и исчезает.

Итак, я попытался с обратным вызовом:

function fadeOutComplete(){
  $("#some").html("<%= @cc %>").fadeIn("slow");
}
$("#some").fadeOut("slow",fadeOutComplete);

Теперь это работает, но выглядит и кажется неуклюжим. Есть ли какой-нибудь способ написать этот DRYer и еще jQuery-er ? (даже не уверен, что я имею в виду под jQuery-er !)

Как я могу передать элемент, значение которого должно быть установлено, а значение должно быть установлено на fadeOutComplete, чтобы я мог сделать этот обратный вызов своего рода родовым?

Ответы [ 4 ]

12 голосов
/ 24 апреля 2011

Проверить это ...

$("#some").fadeOut("slow", function() {
   $(this).html("<%= @cc %>").fadeIn("slow");
});
  • Вы можете передать анонимную функцию, чтобы предотвратить регистрацию именованной функции, которая, без сомнения, будет использоваться только один раз.
  • Внутри обратного вызова завершения для fadeOut(), this указывает на собственный элемент DOM. Это позволяет вам снова сослаться на него сухим способом.
5 голосов
/ 24 апреля 2011

Тот же подход, но с некоторой чистотой:

$('#some').fadeOut('slow',function(){
     $(this).html('somehtml').fadeIn('slow');
});
0 голосов
/ 24 апреля 2011

попробуй так:

$('#some').fadeOut('slow',function(){
$('#some').html('somehtml');
$('#some').fadeIn('slow');
});
0 голосов
/ 24 апреля 2011

Это проблема с командой fade. Команда выполняется асинхронно, то есть, когда она затухает, текст изменяется. Посмотрите на этот вопрос для ответа: JQuery синхронная операция

...