пятница, 17 апреля 2009 г.

События Javascript на прозрачных элементах в IE 7 (Internet Explorer 7)

Мерзкий, гадкий, подлый осёл не дает перехватывать события на элементах страницы для которых стоит свойство background-color:transparent. У меня ушло немеряно времени что-бы отучить его от этого поведения, и заставить поймать мое событие.

Хак:

//Panel - это мой div
//Проверяем, действительно ли это IE7
if((document.all && !window.opera && window.XMLHttpRequest) ? true : false) {
//Делаем его мой див непрозрачным, ибо только непрозрачные контролы ловят события.
Panel.style.backgroundColor = "gray";
//И делаем его прозрачным снова.
Panel.style.filter = "alpha(opacity = 0)";
}


Но у этого решения есть серьезный недостаток. Все вложенные элементы тоже становятся прозрачными!!! Хак приведенный ниже работает без этого недостатка:

/*IE HACK. It takes more than 40 hours for me.*/
if((document.all && !window.opera && window.XMLHttpRequest) ? true : false) {
Panel.style.background = "url(bogus)";
}


Это решение найдено здесь

2 комментария :

  1. 40 часов, да по 30$ - это почти 40 тыс. рублей. А jQuery сама такие вещи не фиксит?

    ОтветитьУдалить
  2. jQuery может и фиксит... Но я работал без JQuery.

    ОтветитьУдалить