2011-08-09 4 views
0

У меня есть некоторые скрипты, которые меняют мое веб-приложение. Что в основном делает: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() используется для привязки события к элементу, созданного динамически после загрузки страницы. Какой браузер вы используете? и какая версия jQuery? Потому что я помню, что была ошибка с .heigth() и определенным браузером.

+0

Я использую последнюю версию Chrome для Mac на сегодняшний день. Я также использую последнюю версию jQuery (CDN). Я пробовал это также на iPad Firefox, но у меня такие же результаты. – frarees

0

Обратите внимание, что Вы можете передать более чем один аргумент событие JQuery жить так:

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

Дело в том, что оно привязано к событиям должным образом. Проблема заключается в первой попытке загрузки: когда я изменяю размер окна, он отлично работает. – frarees

 Смежные вопросы

  • Нет связанных вопросов^_^