2011-08-09 41 views
0

我有一些修改我的web應用程序的腳本。 它通常做的是:jQuery append沒有看到變化?

  1. 添加動態元素到DOM
  2. 調整一些DOM元素,以適合窗口的高度和其他的東西...

所以,我做的:

$(document).ready -> 
    $('.interval-view').wrapInner '<div class="column" />' 
    $('.column').wrapInner   '<div class="inner-column" />' 
    $('#contents, #footers').append '<div class="clearfix"></div>' 

    $('.interval-view:even').css 'background-color', '#F9F9F9' 
    $('.interval-view:odd').css 'background-color', '#DDD' 

    resize = -> 
    $('.column').height       $(window).height() - $('#filter-list').outerHeight(true) - $('#footers').outerHeight(true) 
    $('#timeline-panel').width     $(window).width() 
    $('#timeline-panel .scrollable-area').width "#{$('.interval-view').length * $('.interval-view').width()}px" 

    window.onorientationchange = -> 
    resize() 

    $(window).resize -> 
    resize() 

    resize() 

但是,我沒有得到$('.column').height的適當高度值。該腳本檢索到的高度值就像我沒有附加clearfix元素一樣。這就像它在計算最終高度時沒有考慮到那部分。

我甚至嘗試過使用延期對象,但沒有成功。它仍然需要高度沒有clearfix元素考慮。

對於未CoffeeScript的人,在這裏我粘貼生成的Javascript:

$(document).ready(function() { 
    var resize; 
    $('.interval-view').wrapInner('<div class="column" />'); 
    $('.column').wrapInner('<div class="inner-column" />'); 
    $('#contents, #footers').append('<div class="clearfix"></div>'); 
    $('.interval-view:even').css('background-color', '#F9F9F9'); 
    $('.interval-view:odd').css('background-color', '#DDD'); 
    resize = function() { 
     $('.column').height($(window).height() - $('#filter-list').outerHeight(true) - $('#footers').outerHeight(true)); 
     $('#timeline-panel').width($(window).width()); 
     return $('#timeline-panel .scrollable-area').width("" + ($('.interval-view').length * $('.interval-view').width()) + "px"); 
    }; 
    window.onorientationchange = function() { 
     return resize(); 
    }; 
    $(window).resize(function() { 
     return resize(); 
    }); 
    return resize(); 
    }); 

任何方式來解決呢?

回答

0

,這可能由使用jQuery .live

的.live()方法能夠影響尚未得到 通過使用事件代表團添加到DOM元素來解決:一個處理程序的約束 祖先元素負責在其後代觸發的事件。傳遞給.live()的處理程序永遠不會綁定到 元素;相反,.live()將一個特殊處理程序綁定到DOM樹的根目錄。

+0

不過,我的問題是不是與事件,它與頁面加載。在加載頁面之後,調整大小事件效果很好。唯一不起作用的是在加載頁面(當然,沒有觸發任何調整大小事件) – frarees

0

.live()用於將事件綁定到加載頁面後動態創建的alement。 你使用什麼瀏覽器?和什麼版本的jQuery?因爲我記得有一個與.heigth()和某個瀏覽器有關的bug。

+0

從今天開始,我使用最新的Chrome版本。我也使用最新的jQuery版本(CDN)。我已經在iPad上試過了Firefox,但我得到了相同的結果。 – frarees

0

請注意,您可以通過多個事件參數jQuery的生活是這樣的:

$(window).live('resize onorientationchange', function() { 
    resize(); 
}); 
+0

事情是它正確地綁定到事件。問題出在第一次加載時:當我調整窗口大小時,它的效果很好。 – frarees