Mam następujące oświadczenie jquery:

$('.panel.col2, .panel.col3').fadeOut('fast', function(){
    //SOME CODE
});

Problem polega na tym, że te elementy nie zawsze istnieją i potrzebuję ich do wykonania wywołania zwrotnego niezależnie od powodzenia instrukcji, do której należy wywołanie zwrotne. Czy jest jakieś obejście tego?

0
nkcmr 18 lipiec 2011, 18:41
5
Wygląda na to, że to nie jest oddzwonienie?
 – 
Schroedingers Cat
18 lipiec 2011, 18:44
Chodzi o to, że trzeba to wykonać zawsze PO usunięciu elementów.
 – 
nkcmr
18 lipiec 2011, 18:54

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj czegoś takiego:

function myCallback(){
   //SOME CODE
}

if($('.panel.col2, .panel.col3').length>0){

   $('.panel.col2, .panel.col3').fadeOut('fast', function(){
       myCallback();
   });
} else {
   myCallback();
}
1
avall 18 lipiec 2011, 18:47
To jest trochę bardziej zorganizowane. Dlatego wybrałem to jako odpowiedź.
 – 
nkcmr
18 lipiec 2011, 19:00
1
... jest to w rzeczywistości mniej wydajne, ponieważ wielokrotne użycie tego samego selektora jQuery w tym samym bloku kodu powoduje dodatkowe zapętlenie. Bardziej wydajne byłoby po prostu przechowywanie obiektu jQuery w zmiennej, a następnie użycie tej zmiennej. Przykład: var mypanelelement = $('.panel.col2, .panel.col3'); Teraz możesz użyć zmiennej mypanelelement zamiast zmuszać jQuery do ponownego wyszukania elementu.
 – 
John Hartsock
18 lipiec 2011, 19:17
Hartsock: Oczywiście masz rację, ale zauważyłem też słabość w twoim kodzie - definiujesz funkcję dopiero wtedy, gdy dokument jest załadowany, a ten kod można było wczytać dużo wcześniej. Zależy oczywiście od złożoności kodu wewnątrz funkcji. W każdym razie jest to kopnięcie w wydajności. PS Tak, wszystko inne powinienem zapakować w gotowy dokument. Ja wiem :).
 – 
avall
19 lipiec 2011, 15:28

Wygląda na to, że chcesz, aby jakiś kod został uruchomiony w wywołaniu zwrotnym dla fadeOut i na zewnątrz, jeśli nie ma elementów do wygaszenia. Oto pomysł, ale nie znam kontekstu tego, co próbujesz zrobić.

$(document).ready (function () {
  var panelElement = $('.panel.col2, .panel.col3');
  var fadeOutCallBack = function(){
    //SOME CODE
  };
  panelElement.fadeOut('fast', fadeOutCallBack);
  if (panelElement.length == 0) {
    fadeOutCallBack();
  }
});
1
John Hartsock 18 lipiec 2011, 18:45