/ / Javascript: IE event.preventDefault je null alebo nie objekt - javascript, internet explorer

Javascript: IE event.preventDefault je null alebo nie objekt - javascript, internet explorer

Môj kód funguje v FF / Chrome / Everything okremIE (zlyhalo v oboch 7/8, nemal som trápenie, že by som sa dostal dole), kvôli obmedzeniam, nemôžem použiť jQuery a som ťažké kódovanie Javascriptu .. Problém je s IE, dostávam "preventDefault je null alebo nie objekt. "Dúfam, že jeden z vás má odpoveď a tu je príslušný kód:

Metóda AddEvent:

function addEvent( obj, type, fn ) {
if ( obj.attachEvent ) {
obj["e"+type+fn] = fn;
obj[type+fn] = function(){obj["e"+type+fn]( window.event );}
obj.attachEvent( "on"+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
};

Chyba hádzania obsluhy udalostí:

function mousedown(e){
if(e.preventDefault){
e.preventDefault();
} else {
e.returnValue = false;
e.cancelBubble=true;
}
//Processing
};

Taktiež DOCTYPE a charset sú nastavené na volajúcej HTML stránke. Akékoľvek nápady by boli ocenené. Chyba je vyhodená v príkaze if pre metódu metódou presýpania.

EDIT:

Vzhľadom k tomu, že popadla okno.udalosť "opraviť" hlavný problém, zistil som, že problém bol iný oddiel kódu. V zásade pridávam prvok na predbežne umiestnený prvok a potom zaznamenávame udalosti mousedown / mousemove na túto div. Pri spúšťaní udalosti na <div>, Že "S, kde sa chyba hodí.

Mohla by to byť niečo kvôli tomu, že mám udalosti registrované na 2

rect = document.createElement("div");
rect.className="square";
rect.id="chooser_rectangle";
rect.style.left=initx+"px";
rect.style.top=inity+"px";

addEvent(rect,"mousemove",mousemove);
addEvent(rect,"mousedown",mousedown);

odpovede:

6 pre odpoveď č. 1

V IE objekt udalosti nie je odovzdaný ako prvý argument pre obsluhu udalosti. Namiesto toho ide o globálnu premennú:

function mousedown(e){
var evt = e || window.event; // IE compatibility
if(evt.preventDefault){
evt.preventDefault();
}else{
evt.returnValue = false;
evt.cancelBubble=true;
}
//Processing
};

0 pre odpoveď č. 2

IE má iný model udalostí ako ostatné prehliadače (dokonca IE8). V IE by ste to nazvali, aby urobili to isté:

event.returnValue = false;

Musíte zistiť, čo prehliadač podporuje, a zavolajte správnu metódu. Takže najprv skontrolujte, či je udalosť event.returnValue nastavená, ak áno, potom ju zavolajte, inak zavolajte preventDefault ().