Autor Zpráva
fos4
Profil
Zdravim muze nekdo poradit proc mne nejde toto v IE a hlasi ze nezna fci :
Object.prototype.sa = function(n,v) {

/**
* Pokud je to class musime to nasvati rucne jako className kuvli IE
*/
switch(n) {
case 'class':
this.setAttribute('className', v);
return true;

// Pokud je to neni volani fce ale je to napr. onclick="fcename"
case ('onmousedown'):
eval('this.onmousedown = function(event) {'+v+'};');
return;


case 'width':
case 'height':
case 'top':
case 'left':
case 'bottom':
case 'right':
case 'offsetTop':
case 'offsetLeft':
case 'offsetBottom':
case 'offsetRight':
case 'offsetWidth':
case 'offsetHeight':
eval('this.style.'+n+' = v + 'px'');
break;

default:
this.setAttribute(n,v);
}
}


toto volam cca z necoho takoveho:
function desk {
function _se(o) {
o.sa('onmousedown', 'alert('fungujem')');
};

this.function cr(p) {
_sE(p);
}'
}

Dekuji
ah01
Profil
Už na první pohled: eval('this.style.'+n+' = v + "px''); nebo o.sa('onmousedown', "alert('fungujem')"); i když myslím, že tohle jsi se asi jen přepsal při psaní dotazu. Ale dál to zkoumat nemá cenu, ten kód je totiž děsný paskvil.

1) Pominu to, že se důrazně nedoporučuje rozšiřovat Object a přejdu rovnou k tomu hlavnímu. Jak můžeš rozšiřovat obecný Object o metodu který počítá s tím, že je volaná nad HTMLElement. Co kdybych to sa(…) zavolal třeba u Array?

Mimochodem, používání názvů typu sa, _se, _sE je poněkud nic neříkající, proč nenapíšeš třeba mySetAttribute (předpokládám, že to sa je zkratka ze setArttribute)?

2) Použití fce. eval se dá ospravedlnit jen ve zcela zvláštních případech, jako je třeba zpracování JSON kódu, ale i tam to má své pro a proti.
Použití jaké je vidět zde, je prostě ohavnost! Proč prostě nenapíšeš:
this.style[n] = v + „px“;
fos4
Profil
ah01: dekuji ze jsi mne poradil proc nejde rozsirovat object v ie..
ah01
Profil
Ne ne, v tom to není, ono to jde, jen se to nedoporučuje. viz http://erik.eae.net/archives/2005/06/06/22.13.54 nebo http://log.under-construction.cz/?p=19

Mnohem větší problém tvého kódu je, ale to použití eval. Nejedná se o problém ve funkčnosti, ale spíše v principu a v zásadách dobrého programátora. Používání eval, a jeho ekvivalentů, tedy new Function, setInterval a setTimeout je velké zlo (z anglického eval is evil). Psát jakýkoliv kód jako řetězec a pak ho spouštět vyhodnocením je velmi nebezpečné. Můžeš si tím snadno způsobit běhové chyby, které se velmi těžko hledají. Přitom je to zbytečné.
fos4
Profil
to co jsem napsal neni uplne a neni to ani konecne, potreboval bych vedet pro to nesezere IE ale ff a op jo
ah01
Profil
Já doufal, že tě od toho odradím nějak jednoduše. Problém je v tom že u IE nejde objekt HTMLElement pomocí jeho prototype rozšířit. Je to jedna z mnoha chyb IE. Tím se tvůj záměr trochýtek komplikuje.

Připravil jsem ti tedy malou ukázku jak to zařídit. Na podobném principu funguje třeba Prototype Framework.

Mrkni na http://jslab.net/pub/jpw/sf/index.html a pak na kód
fos4
Profil
ah01
moc dekuji tohle jsem presne potreboval vedet, pomohlo by to konecne vyresit vetsinu problemu v IE..
fos4
Profil
jeste jednou dikec .p

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0