ugrás a tartalomhoz

detachEvent nem működik IE(6) alatt?

Anonymous · 2005. Május. 31. (K), 16.58
Ü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