jQuery追加看不到变化?

时间:2011-08-09 12:27:15

标签: jquery append coffeescript clearfix

我有一些脚本可以修改我的Web应用程序。 它基本上做的是:

  1. 向DOM添加动态元素
  2. 调整一些DOM元素的大小以适应窗口高度和其他东西......
  3. 所以,我这样做:

    $(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();
      });
    

    有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

这可以通过使用jquery .live

来解决
  

.live()方法能够影响尚未存在的元素   通过使用事件委托添加到DOM:处理程序绑定   祖先元素负责触发的事件   它的后代。传递给.live()的处理程序永远不会绑定到   元件;相反,.live()将一个特殊的处理程序绑定到。的根   DOM树。

答案 1 :(得分:0)

.live()用于将事件绑定到加载页面后动态创建的alement。 你使用的是什么浏览器?什么版本的jQuery?因为我记得.heigth()和某些浏览器存在错误。

答案 2 :(得分:0)

请注意,您可以将多个事件参数传递给jQuery live,如下所示:

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