вторник, 28 апреля 2009 г.
пятница, 17 апреля 2009 г.
Javascript функция рекурсивного обхода DOM
Пока я с красными глазами искал как исправить баг в IE из прошлого поста. Я написал весьма полезную функцию подписывающую все подписывающиеся потомки заданного элемента на событие вызывающие alert. И хотя существует мнение, что дебажить код алертами плохо - эта возможность меня спасла, от разрыва мозга, как минимум.
function resetinputs(node) {
var oNode = node;
if (!oNode.length) {
try {
if (oNode.tagName == "IMG" || oNode.tagName == "MAP" || oNode.tagName == "AREA") { alert(oNode.tagName + "-|-" + oNode.id); };
if (oNode.Id == "ChartArea1") { oNode.style.opacity = ".5"; };
}
catch (dfr) { };
var curch = oNode;
try {
curch.onmouseup = function(evnt) {
var n = 1;
alert(this.tagName + " -|- " + this.id);
var z = 25;
};
} catch (eval) { };
if (oNode.childNodes) {
curch = oNode.childNodes;
for (var n = 0; n < curch.length; n++) resetinputs(curch[n]);
}
}
else {
curch = oNode.childNodes;
for (var i = 0; i < curch.length; i++) { resetinputs(curch[i]) };
}
return 1;
}
События 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)";
}
Это решение найдено здесь
воскресенье, 5 апреля 2009 г.
пятница, 3 апреля 2009 г.
четверг, 2 апреля 2009 г.
Подписаться на:
Сообщения
(
Atom
)