detachEvent nem működik IE(6) alatt?
Üdv mindenkinek,
szeretnék form elemeknek hover, focus emulációt csinálni Explorer alá (FF,Opera alatt működik).
Ennek megvalósításához eventHandlereket használok, mint a Weblaboron, de sajna a Focus-os problémát nem tudom leküzdeni, pontosabban ha már megkapta a focus-t a form(elem pl: radiobutton), akkor le szeretném róla szedni az mouseover('hover_' class-ra állítja vissza az objektumot) és a mouseout('default' class-ra állítja vissza az objektumot) eseménykezelőket.
Bár azt írja a Quirksmode.org, hogy a focus-ra az IE nem adja vissza a megfelelő objektumot, de nekem sikerült a className(ezzel az objektum class-át lehet átállítani) propertyját átállítani!!
egy kis minta a js fájlból, egy egyszerű formkezelőt képzeljetek el, radiobuttonokkal(5db):
var msie = ((navigator.appVersion.indexOf("MSIE")!= -1)&&!window.opera)? true : false;
//addEvent(window, 'load', disableItems);
addEvent(window, 'load', classPopupHandler);
function classPopupHandler() {
if (msie) {
for (i=0; i<=4; i++) {
addEvent(document.form1['QA1'][i], 'mouseover', changeOver);
addEvent(document.form1['QA1'][i], 'mouseout', changeOut);
addEvent(document.form1['QA1'][i], 'focus', changeFocus);
}
}
}
function changeOver(evt) {
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
tg.className = 'Hover_';
FocusedItem = tg.Name;
}
function changeOut(evt) {
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
tg.className = 'Default_';
}
function changeFocus(evt) {
for (i=0; i<=4; i++) {
addEvent(document.form1['QA1'][i], 'mouseover', changeOver);
addEvent(document.form1['QA1'][i], 'mouseout', changeOut);
}
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
handled_();
tg.className = 'Focus_';
/* !!!!! ITT VAN A FŐ HIBAFORRÁS, VALAHOGY EZT NEM TUDJA MEGCSINÁLNI !!! */
removeEvent(tg,"mouseout", h);
removeEvent(tg,"mouseover",h);
}
function h() {
alert('s'); /* TESZT */
}
function handled_()
{
for (i=0; i<=4; i++) {
document.form1['QA1'][i].className = 'Default_';
}
}
function addEvent(obj, evType, fn) {
if (obj.addEventListener) {
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent) {
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
function removeEvent(obj, evType, fn) {
if (obj.removeEventListener) {
obj.removeEventListener(evType, fn, false);
return true;
} else if (obj.detachEvent) {
var r = obj.detachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
Üdv
Sanyi
■ szeretnék form elemeknek hover, focus emulációt csinálni Explorer alá (FF,Opera alatt működik).
Ennek megvalósításához eventHandlereket használok, mint a Weblaboron, de sajna a Focus-os problémát nem tudom leküzdeni, pontosabban ha már megkapta a focus-t a form(elem pl: radiobutton), akkor le szeretném róla szedni az mouseover('hover_' class-ra állítja vissza az objektumot) és a mouseout('default' class-ra állítja vissza az objektumot) eseménykezelőket.
Bár azt írja a Quirksmode.org, hogy a focus-ra az IE nem adja vissza a megfelelő objektumot, de nekem sikerült a className(ezzel az objektum class-át lehet átállítani) propertyját átállítani!!
egy kis minta a js fájlból, egy egyszerű formkezelőt képzeljetek el, radiobuttonokkal(5db):
var msie = ((navigator.appVersion.indexOf("MSIE")!= -1)&&!window.opera)? true : false;
//addEvent(window, 'load', disableItems);
addEvent(window, 'load', classPopupHandler);
function classPopupHandler() {
if (msie) {
for (i=0; i<=4; i++) {
addEvent(document.form1['QA1'][i], 'mouseover', changeOver);
addEvent(document.form1['QA1'][i], 'mouseout', changeOut);
addEvent(document.form1['QA1'][i], 'focus', changeFocus);
}
}
}
function changeOver(evt) {
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
tg.className = 'Hover_';
FocusedItem = tg.Name;
}
function changeOut(evt) {
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
tg.className = 'Default_';
}
function changeFocus(evt) {
for (i=0; i<=4; i++) {
addEvent(document.form1['QA1'][i], 'mouseover', changeOver);
addEvent(document.form1['QA1'][i], 'mouseout', changeOut);
}
evt || (evt = window.event);
if( evt.srcElement ) tg = evt.srcElement;
else if( evt.target ) tg = evt.target;
handled_();
tg.className = 'Focus_';
/* !!!!! ITT VAN A FŐ HIBAFORRÁS, VALAHOGY EZT NEM TUDJA MEGCSINÁLNI !!! */
removeEvent(tg,"mouseout", h);
removeEvent(tg,"mouseover",h);
}
function h() {
alert('s'); /* TESZT */
}
function handled_()
{
for (i=0; i<=4; i++) {
document.form1['QA1'][i].className = 'Default_';
}
}
function addEvent(obj, evType, fn) {
if (obj.addEventListener) {
obj.addEventListener(evType, fn, false);
return true;
} else if (obj.attachEvent) {
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
function removeEvent(obj, evType, fn) {
if (obj.removeEventListener) {
obj.removeEventListener(evType, fn, false);
return true;
} else if (obj.detachEvent) {
var r = obj.detachEvent("on"+evType, fn);
return r;
} else {
return false;
}
}
Üdv
Sanyi