externalWidth(true) gwtQuery и IE8 не работают без задержки
Недавно я столкнулся со странным поведением при попытке вычислить ширину (с полями) элемента с помощью gwtQuery. Цель состоит в том, чтобы получить ширину (включая отступы, границы и поля) данного элемента как дочернего элемента определенного родителя. Этот родитель может определять определенные правила CSS для некоторых детей, поэтому я клонирую его, добавляю свой элемент к этому родителю, вызываю .outerWidth(true)
чтобы получить ширину и, наконец, удалить клона от родителя.
Он отлично работает в Chrome, Firefox и IE 10, но случайно завершается неудачей (выводит 0) в IE 8. Однако я заметил, что если я помещаю "сон" между моментом добавления элемента в DOM и моментом получения внешнего ширина, это всегда удается.
Я явно не хочу спать. Поэтому мой вопрос: есть ли у кого-нибудь понимание того, как обойти это поведение или даже лучший способ достижения той же цели?
Спасибо!
Вот фрагмент кода
private Integer computeTabWidth(IsWidget tab) {
GQuery $tab = $("<li></li>").append($(tab).clone());
$(containerPanel).append($tab);
// IE 8 debug.
sleep(100);
Integer tabWidth = $tab.outerWidth(true);
$tab.remove();
return tabWidth;
}
private void sleep(int i) {
long time = new Date().getTime() + i;
while (time > new Date().getTime());
}
1 ответ
Я думаю, что это проблема перекомпоновки, попробуйте заставить браузер выполнить перекомпоновку перед прочтением, замените ваш режим сна на:
$tab.css("offsetHeight")