Оверлей jQuery не работает в IE6, Opera - PullRequest
0 голосов
/ 04 июня 2010

Я часами чесал голову, пытаясь понять это. У меня есть эта страница: http://173.203.72.190/default.aspx. При нажатии «Любая кухня» должно открываться какое-то наложение

Отлично работает практически во всех браузерах, кроме IE6 и Opera. В IE6 и Opera «оверлей» jQuery не открывается.

У кого-нибудь есть идеи, почему это может быть?

Редактировать: код, запускающий наложение ниже:

$("a#zoneListLink").click(function() { 

    var listTop = $(this).css("top");
    var listLeft = $(this).css("left");

    var api = $("a#zoneListLink").overlay({api: true, close:'div.close', top: listTop, left:listLeft, onLoad:function() { $(document).click(function() { api.close(); } ); },
    onClose:function() { $(document).unbind("click"); } }).load();

});

1 Ответ

1 голос
/ 04 июня 2010

Существует ошибка или несовместимость внутри эффекта наложения jQuery. Трудно найти, потому что поведение Opera имеет больше смысла, но не соответствует ожиданиям сценария.

Сначала сравните вывод этой команды в Opera и, например, Firefox:

javascript:alert(getComputedStyle(document.getElementById("cuisineListLink"),'').top);

Opera дает вам верхнюю позицию kitchenListLink в пикселях. Firefox говорит «авто».

Теперь, в сочетании с .js ищите этот код (завернутый мной):

if(typeof t=="string"){
    t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()
}

Я понятия не имею, почему он выполняет «parseInt (t, 10) /100*n.height ()», но похоже, что этот код ожидает либо строку «центр» (для вертикального центрирования слоя), либо число. Когда Opera передает строку типа «310px», скрипт извлекает целое число, делит его на 100 (т. Е. 3.1) и умножает на высоту окна браузера (?!). Чистый эффект заключается в том, что наложение аккуратно расположено за пределами экрана - на 3 высоты экрана вниз.

В Firefox мы попадаем на эту строку, а переменная t - это строка 'auto'. Скрипт пытается выполнить parseInt (), который возвращает «Not a Number», NaN, и переходит к делению на 100 и умножению на высоту окна - что, конечно, продолжает возвращать NaN. Затем он размещает оверлей на NaNpx, который браузер просто игнорирует как поддельное значение. Вы найдете предупреждение об этом в консоли ошибок Firefox.

Я бы рекомендовал использовать другой оверлейный плагин (или, возможно, более новую итерацию?), Потому что этот код не имеет особого смысла.

...