2010-12-28 3 views
2

Я пишу простой плагин jQuery, который отображает изображения с определенным классом в центре экрана (при нажатии, полноразмер) с серым наложением вокруг изображения. Когда мы нажимаем на оверлей, оно исчезает. Теперь я использую этот фрагмент кода:jQuery .add method

$("#overlay").click(function(){ 
     $(this).animate({ 
      opacity: "0" 
     }, 500, function(){ 
      $(this).css({ 
       display: "none" 
      }); 
     }); 

     $("#imgcontainer").animate({ 
      opacity: "0" 
     }, 500, function(){ 
      $(this).css({ 
       display: "none" 
      }); 

     }); 

    }); 

imgcontainer хранит наше изображение. Я пытался использовать этот более простой код, но он не работает:

$("#overlay").click(function(){ 
     $(this).add("#imgcontainer").animate({ 
      opacity: "0" 
     }, 500, function(){ 
      $(this).css({ 
       display: "none" 
      }); 
     }); 
    }); 

Почему это не работает?

UPDATE:
Правильный код:

$("#overlay").click(function(){ 
     $("#imgcontainer").add(this).fadeOut(); 
    }); 

Большое спасибо за ответы. Такое поведение (ошибка?) Действительно удивительно.

ответ

3

Если вы используете v1.4.x, из-за issue #7853 Я только что поднял в своем трекере ошибок раньше сегодня (какое время!). Вы можете это исправить, изменив следующим образом:

$(this).add("#imgcontainer").animate(... 

в

$(this).add($("#imgcontainer")).animate(... 

Update: Вот лучше (более эффективный) способ, как и Ник указал ниже:

$("#imgcontainer").add(this).animate(... 

(См. Также его заметку о fadeOut.)

В jQuery 1.3.2 и ранее он работал бы так, как вы ожидали. Я не знаю, является ли вещь 1.4.x ошибкой или преднамеренными несовместимыми изменениями.

Вопрос, хотя: Почему бы просто не вытереть контейнер? Если он содержит изображение, это тоже должно затушевать изображение, не так ли? Как в this example? (Я не делаю много анимации, поэтому извиняюсь, если я пропустил что-то тонкое.)Ничего, ты никогда не говорил, что #overlay был изображением, которое было неверным предположением с моей стороны.

+2

Существует еще более короткий способ: '.fadeOut()' устанавливает 'display: none' в конце, поэтому' $ ("# imagecontainer"). Add (this) .fadeOut() 'должен работать. +1 для проблемы, было бы +2 для подачи ошибок, если бы я мог. –

+0

@Nick: Хороший вопрос о переупорядочении - более эффективный способ его исправить. И спасибо. :-) Я уже вытаскивал свои волосы раньше, когда я столкнулся с этим. –

+0

J. - Я бы сказал, что в этот момент это было намеренно, так как «.add (селектор, контекст)» был добавлен, когда это сломалось ... поэтому он, вероятно, будет закрыт, как не ошибка –