2011-07-17 8 views
6

Pozwól mi zacząć od stwierdzenia, że ​​ze względu na skomplikowany projekt layoutu doszedłem do napisania funkcji o nazwie equalHeights, która zasadniczo wygląda na kilka divów w moim układzie i wybiera najwyższy i ustawia wysokość spoczynku, tak, że mogę skończyć z divami, które mają równe wysokości. Więc po załadowaniu strony, jeśli zajrzysz do kodu, zobaczysz styl = "height: xxx" jest zastosowany do każdego div. Nie mogę tego zmienić, więc żadne rozwiązanie nie może dotknąć tej funkcji.Jak wykrywać i zmieniać wysokość div w jQuery

Elementy div mają również ustawienie overflow, które ma swój cel i nie może się zmienić.

W związku z tym, co muszę zrobić, to być w stanie zmienić wysokość div na podstawie zmian z powodu interakcji użytkownika. Na przykład mam tabelę z ukrytymi wierszami, które są rozszerzane, gdy użytkownik kliknie link. Dodatkowa długość tabeli zostanie ukryta z powodu przepełnienia, potrzebuję rozmiaru div, aby rozwinąć. W tym samym czasie nie chcę wiązać tego rozszerzenia do tego konkretnego kliknięcia, chcę, aby JavaScript wykrył zmiany w treści i odpowiednio rozszerzył mój div. Powodem, dla którego nie chcę tego wiązania, jest to, że potrzebuję tego zaimplementowanego na różnych stronach z tym samym układem i nie chcę kodować dla każdego zdarzenia.

Próbowałem zarówno:

$("#myDiv").resize(function(){ 
    equalHeight($("#myDiv")); 
}); 

i

$("#myDiv").content().resize(function(){ 
    equalHeight($("#myDiv")); 
}); 

nie wydaje się do pracy! Jakieś pomysły?

Odpowiedz

8

Podstawowym zdarzenie resize można powiązać tylko $ (okno), trzeba użyć wtyczki, jeśli chcesz, aby móc powiązać zdarzenie resize do div:

http://benalman.com/projects/jquery-resize-plugin/

+0

Albo jeżeli jej jednorazowa, co można napisać własną wtyczkę, która zegarki na wysokości elementów w timer z niewielkim odstępie i uruchamia funkcję wywołania zwrotnego, gdy uzna zmianę. – Nitin

0

Zakładając, że masz ustawioną liczbę wierszy, możesz sprawdzić liczbę większą niż ta, a następnie odpowiednio ustawić styl div.

1

Można wyzwolić własne wydarzenie div w funkcji. Tak więc nie zmusi Cię to do przepisywania funkcji kliknięcia.

http://jsfiddle.net/JKByC/7/

+0

Powinien zawierać kod w samej odpowiedzi. Ale to świetny pomysł. Wywołaj zdarzenie w znanej funkcji, która powoduje zmianę rozmiaru elementu div, a następnie przechwyć to zdarzenie. – Andrew

0
 var last_height = $('#div').css('height'); 

     $(window).resize(function() { 
      if($('#div').css('height') != last_height) 
      { 
       last_height = $('#div').css('height'); 
       //do what you want 
      } 
     }); 
+0

Dodaj wyjaśnienie do wpisu. Dlaczego Twój post jest odpowiedzią na konkretne pytanie ?. Kod tylko odpowiedź nie jest wystarczająca. Zobacz [Jak napisać dobrą odpowiedź?] (Http://stackoverflow.com/help/how-to-answer) – Shashanth

Powiązane problemy