JQuery слишком быстро для IE6? (Нечетная проблема решена путем добавления оповещений?) - PullRequest
1 голос
/ 21 января 2010

IE6 меня всегда удивляет, но этот ДЕЙСТВИТЕЛЬНО странный.

Я создаю горизонтальное меню, где мне нужно, чтобы текст в каждой «кнопке» располагался по центру. Легко в любом браузере, кроме IE. Поэтому для браузеров IE я использую немного javascript, чтобы добавить необходимые отступы к каждой кнопке, чтобы текст отображался по центру.

У меня это отлично работает в IE8 и IE7. IE6 просто по какой-то причине не делал этого правильно.

Итак, я добавил ALERT прямо перед строкой, которая добавляет заполнение:

$menuTriggerUL.children('li').each(function(i){
        var heightDifference = tallestTab-tabTextHeight[i];
        if (heightDifference < 0){heightDifference=0};
        alert(heightDifference);
        $(this).children('a:first').css("padding-top", Math.floor(heightDifference/2) );
    });

С этим предупреждением IE6 будет по одному применять правильные отступы к каждому элементу должным образом.

Если я уберу предупреждение, оно возится и получает правильное первое, но натыкается на последующие.

Кажется, что jQuery пытается работать быстрее, чем IE6 может с этим справиться. Очевидно, что это, вероятно, не то, что происходит, но я не уверен, как еще описать это.

Некоторые вещи, которые могут быть частью проблемы: я использую функцию jQuery each () и, внутри, собираю значения из предыдущего заполненного массива.

Какие-либо теории относительно того, что может происходить?

ОБНОВЛЕНИЕ: ответ Джуршмана ниже был решением. Я хотел бы узнать больше об этой проблеме, и если у людей есть некоторые идеи относительно того, какие сценарии могут вызвать эту проблему для IE6. Я никогда не сталкивался с этим, но рад иметь исправление в наборе инструментов для будущего использования.

Ответы [ 2 ]

2 голосов
/ 21 января 2010

При работе с IE (особенно 6, но иногда и с 7), довольно часто возникают ситуации, когда DOM, кажется, не готов сразу после того, как каким-либо образом манипулирует им. Очень часто такие проблемы можно решить, отложив проблемный код, выполнив что-то вроде:

setTimeout(troublesomeCode, 0);

(где troublesomeCode - ссылка на функцию, которая будет выполнять проблемные операции)

Я бы также попытался зацикливаться на узлах в обратном порядке и посмотреть, имеет ли это какое-то значение.

0 голосов
/ 21 января 2010

В операторе if нет закрывающей скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...