2013-03-18 18 views
7

Web sayfası içeriğinin yüksekliğini, üstbilgi ve altbilgi değerlerini pencere boyutundan çıkararak ve içeriği belge yükünde bu değere ayarlayarak dinamik olarak ayarlamaya çalışıyorum.jQuery outerHeight, doğru değeri döndüremiyor

Her bir işlev parametresi, öğe yüksekliğini almak için bir öğe kimliğini alır; içerik parametresi hariç.

function setH(header, content, footer) 
{ 
    winH = top.innerHeight; 
    winTitle = 32; // height value of the window title (part of the header) 
    headH = $(header).outerHeight(true); 
    footH = $(footer).outerHeight(true); 
    contentH = winH - winTitle - headH - footH; 
    $(content).css({'height' : (contentH) + 'px','overflow-y' : 'scroll'}); 
} 

İçinde bulunduğum sorun, outerHeight değerleri yanlış değerler döndürüyor. Üstbilgi 23px ve altbilgi 40px döndürür.

FF ve Chrome'daki öğeleri incelerken değerler 25px ve 44px'dir.

innerHeight ,, outerHeight ve outerHeight (true) kullanmayı denedim, ancak doğru değerleri alamıyorum.

Neyin yanlış gittiğine dair herhangi bir öneriniz var mı? veya içeriğin yüksekliğini dinamik olarak ayarlamada alternatif bir yol? Herhangi bir yardımın takdir edilmesini sağlamak için saçım tükeniyor.

Düzenleme: İçerisinde iframe'ler ile çalışıyorum. Aşağıdaki: winH = top.innerHeight en çok iframe penceresinin yükseklik değerini alıyor.

+0

'top' nedir? Ne tutuyor? Lütfen düzeninizi de gösterin. – Starx

+0

iframe'lerde açılan özel pencereler var; En üstteki iframe yüksekliğinin en üstünde duruyor. –

cevap

1

Ekran genişliğini/yüksekliğini hesaplamak için kullandığım bir komut dosyasını değiştirdim. Bu çalışırsa bakınız: Beni $(window).load() içinde outerHeight() değil $(document).ready() denetler kod koymaktır yardımcı olan denemek için

if (typeof window.innerWidth != 'undefined') { 
     viewportwidth = window.innerWidth; 
     viewportheight = window.innerHeight; 
     winTitle = 32; 
     headH = $(header).outerHeight(true); 
     footH = $(footer).outerHeight(true); 
     contentH = viewportheight - winTitle - headH - footH; 
    } 

    // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) 

    else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { 
     viewportwidth = document.documentElement.clientWidth; 
     viewportheight = document.documentElement.clientHeight; 
     winTitle = 32; 
     headH = $(header).outerHeight(true); 
     footH = $(footer).outerHeight(true); 
     contentH = viewportheight - winTitle - headH - footH; 
    } 

    // older versions of IE 

    else { 

    viewportwidth = document.getElementsByTagName('body')[0].clientWidth; 
    viewportheight = document.getElementsByTagName('body')[0].clientHeight; 
    } 
    document.getElementById("content id").style.height = contentH + "px"; 
+0

Komut dosyanızı geçerli kodumla çalışacak şekilde değiştirdim, ancak döndürdüğüm değerler orijinal kodumla aynı. –

+0

Üstbilgi ve altbilgi dinamik mi? Eğer değilse, .outerHeight (true) değerini piksellerin yüksekliğiyle değiştirebilirsiniz. – Jefferson

+0

Bu benim şu andaki çalışmam ama kodun olabildiğince dinamik olmasını istiyorum. Bunun için değerleri elde edebilmem gerekir. –

15

Bir şeyi. Açıktır ki birçok durumda $(document.ready()'u kullanmak iyidir, ancak bazen outerHeight()'un yanlış değeri tamamen yüklenmemiş öğelerin nedenidir.

+1

Eklemem gereken bir şey, sayfadaki TÜM öğeler resim dahil olmak üzere yüklemeyi bitirdikten sonra '' (window) .load() 'denir. – Gavin