2011-11-08 16 views
15

Bu durum, yan yana 2 div var. Bir div yükseklik bakımından çok dinamiktir, temel olarak içeriğine uyum sağlamak için büyümesi ve küçülmesi anlamına gelir. Örneğin, bu div, açık veya kapalı katlanmış veya ajax yüklü içeriğe uyacak şekilde genişleyebilen kapsayıcı içeriğe sahiptir.jquery resize dinleyici bir div üzerinde

Şimdi, bu div'in yanında, birincisi css aracılığıyla düzgünce izleyen bir başka şey var. Harika çalışıyor. Ama asıl soru şu: Bu ikinci divun içeriğini, yüksekliğine bağlı olarak değiştirmek istiyorum.

Başka bir deyişle, div 1 boyutu değişir, div 2, css ile izler ve şimdi yeni içerikle div 2'yi yeniden doldurmak için ajax çağrısını tetiklemem gerekiyor.

JQuery ile bunu nasıl yapabileceğimi bilen var mı? Mümkünse, zaman aşımı olmadan?

Şerefe.

+1

allmoast yinelenen bir 2saat kaybetti http://stackoverflow.com/questions/172821/detecting-when-a-divs-height-changes- -Jquery kullanarak, bir soru göndermeden önce arama lütfen –

cevap

19

the thread poelinca provided anlaşılacağı gibi, bu işlev için kullanılabilir bazı güzel eklentileri vardır.

Eklenti fikrini beğenmediyseniz, basit bir çözüm, içerik değiştirildiği zaman div üzerinde "yeniden boyutlandırma" olayını tetiklemektir. Ardından, beklendiği gibi yeniden boyutlandırma() ile izleyebilir ve zarif bir observer pattern kullanabilirsiniz. Büyü gibi

function appendContent($div, content) { 
    $div.append(content).trigger($.Event('resize')); 
} 

$div.bind('resize', function(e) { 
    // all your magic resize mojo goes here 
}); 
+0

Teşekkür ederim! bir tedavi! – Peter

+0

Hey sen, ben konuşma için geç kaldım, ama tam olarak nasıl bu kodu kullanacaksın? Birisi onu arama hakkında nasıl gidiyor? –

+0

@JeremyMiller burada fikir her içerik güncellendiğinde, sen appendContent (...) yöntemini çağırın (Sonunda bir şey aramak zorundasınız). AppendContent uygulamasında, div yeniden boyutlandırıldığını belirten kendi yeniden boyutlandırma etkinliğinizi tetiklersiniz. $ Div.bind ('resize', ...) 'içindeki kod, automagically olarak adlandırılır (yeniden boyutlandırma olaylarını dinler) – Kato

0

Düşünebildiğim tek şey, her X saniyede bir yükseklik kontrolü yapmaktır. Böyle

şey:

function checkHeightTimer(){ 
    var div1 = $('#div1'); 
    var div2 = $('#div2'); 
    var somesize = #somenumber here; 
    if(div1.height() > somesize){ 
     //do something to div2 
    } 
    setTimeout(checkHeightTimer, 500); //at 500 miliseconds 
} 
+3

Periyodik kontrol gerektiren herhangi bir çözüm bir olay tabanlı bir çözüm yerine çok şık bir "kesmek" olarak düşünülebilir. Bazen kaçınılmaz? –

6

https://github.com/sdecima/javascript-detect-element-resize

İşleri!

boyunca hep şeffaf attrchange test ama bu çalışma değildi, işin :(

+0

Çok iyi bir senaryo! Şimdiye kadar görülmüş olan 'sadece', bir değişimin algılanması için öğelerin boyutunu aralıklı olarak sorgulamak için ** süreleri ** KULLANMAYIN. Bu teknik, korkunç bir performans sergiliyor! Teşekkürler @Jaroslav –