mmofacts.com

Verdammtes JS

gepostet vor 17 Jahre, 7 Monate von Sensei
Hallo,
langsam habe ich schon ein schlechtes Gewissen, dass ich euch hiermit das dritte Mal um Hilfestellung bitten muss, aber allmählich kriege ich nen Fön mit meinem Javascript.
Immer und immer wieder das selbe Problem: alle Browser machen es, der IE nicht -.- Wäre klasse wenn jemand eine Idee hätte.
Ich habe folgendes Problem:
In meinem JavaScript erzeuge ich ein -Element und hänge es ins HTML-Dom ein.
Das klappt auch wunderbar. Jetzt möchte ich meinem -Element ein weiteres Attribut hinzufügen: onClick="alert('bla');"
Dafür habe ich mir folgende Funktion gebaut.
 functionSetEv(ID,Type,Value)

{
var domEvent = document.createAttribute(Type);
domEvent.nodeValue = Value;
if (document.getElementById(ID))
{
var dom = document.getElementById(ID);
dom.setAttributeNode(domEvent);
};
};
Ich rufe die Funktion mit folgenden Parametern auf:
SetEvent('ID des Span-Elementes','onClick',"alert('bla');");
Im Firefox wird mir im DOM-Inspector das Attribut auch angezeigt und es funktioniert auch wenn ich auf das -Element klicke, dh.h. "bla" wird ausgegeben.
Ebenfalls so auch im Opera, nur (wiedermal) nicht im IE 6 und 7!
Warum? Kann der IE keine Events auf Elemente anwenden, hat der einen Bug oder mache ich was falsch?
Biddö helft einem verzweifelten Sensei. -.-
mfg
Sensei
gepostet vor 17 Jahre, 7 Monate von TheUndeadable
Ich nutzte folgende Funktionen:

function DHTML_init()
{
if (window.opera)
{
OP = 1;
}

if(document.getElementById)
{
DHTML = 1;
DOM = 1;
}

if(document.all && !OP)
{
DHTML = 1;
MS = 1;
}
if(document.layers && !OP)
{
DHTML = 1;
NS = 1;
}
}
function DHTML_AddEvent ( oNode, szText, fctFunction )
{
// Shitty IE needs special treatment

if ( MS )
{
if ( szText == "click" )
{
oNode.onmousedown = fctFunction;
}

if ( szText == "mousemove" )
{
oNode.onmousemove = fctFunction;
//alert ( fctFunction );
}
}
else
{
oNode.addEventListener ( szText, fctFunction, true );
}

}
function DHTML_GetEventSrcElement ( ev )
{
// SHITTY IE, I HATE YOU

if ( MS )
{

return window.event.srcElement
}
else
{
return ev.target;
}
}
gepostet vor 17 Jahre, 7 Monate von Klaus
onclick im HTML-Element selbst (inline) ist nun mal eine uralte Vorgehensweise zu deklarieren und nicht geeignet um variabel Events zu registrieren.
Dafür kann man meinElement.onclick = meineFunktion; verwenden.
Das ist das traditionelle Modell von Netscape. Allerdings kann man so nicht mehrere Funktionen zuweisen.
Das Standardverhalten ist meinElement.addEventListener("click", meineFunktion);
Das können auch alle Browser, außer der IE. Der nennt das ganze attachEvent(), die Syntax ist hingegen fast identisch, statt "click" muss man nur "onclick" verwenden.
-> www.quirksmode.org/js/events_advanced.html
Ich empfehle darüber hinaus die Eventwrapper von Prototype.
gepostet vor 17 Jahre, 7 Monate von knalli
Original von Klaus
Dafür kann man meinElement.onclick = meineFunktion; verwenden.
Das ist das traditionelle Modell von Netscape. Allerdings kann man so nicht mehrere Funktionen zuweisen.

Naja, über "Umwege" schon.
meinElement.onclick = function() { func1(); func2(); /*... */ }

Ich empfehle darüber hinaus die Eventwrapper von Prototype.
Dito.
gepostet vor 17 Jahre, 7 Monate von Fornax
Original von Klaus
Ich empfehle darüber hinaus die Eventwrapper von Prototype.

Ich arbeite mit mootools, ich denke das baut auf prototype auf. Das finde ich sehr praktisch, und läuft auf den meisten Browsern ohne Probleme
gepostet vor 17 Jahre, 7 Monate von Sensei
Hallo,
ich danke Euch allen mal wieder für die Tips.
Werde das Problem heute Abend mal in Angriff nehmen.
mfg
Sensei

Auf diese Diskussion antworten