1. Är det nån som förstår vad jag menar? 2. Är det nån som vet hur man löser deta?
Jag tror inte att jag förstår vad du egentligen är ute efter, d.v.s. det där med att "ändra eventen för olika händelser i andra händelser"...
...hur gör jag om jag vill passa med en parameter? (this som det är i detta fallet)...
....men om du kan lösa ditt problem genom att kunna skicka med parametern 'this' till en funktion som du kör med eval, så är nog problemet något i stil med att du helt enkelt inte använde rätt parenteser/citationstecken etc. i anropet när du provade 'eval("funktionsNamn(this)")'
Om du t.ex. använder koden nedan så kommer nämligen DIV resp. SPAN att "alertas" beroende på var du klickar.
<script type="text/javascript" language="javascript">
function evalFunktion(htmlObjekt)
{
alert(htmlObjekt.tagName);
}
</script>
.....
<div onclick="eval('evalFunktion(this)');">Klicka här 1</div>
<span onclick="eval('evalFunktion(this)');">Klicka här 2</span>
Såvitt jag förstår så var det något sådant du var ute efter men inte fick att fungera.
Å andra sidan förstår jag inte vad du menar med att "this är felaktigt" eller att "koden nedan körs på en gång"...
(d.v.s. om du menar "På en gång" när sidan laddas eller "på en gång" när man har gjort en mouseover, vilket vore ett normalt beteende som man man kan förvänta sig...)
jag har en tabell
varje rad har onmouseover och onmouseout som ändrar radfärgen under muspekaren.
vid klick sätter jag om bakgrundsfärgen till en tredje färg(t.ex. GUL) och TAR BORT onmouseover/out (sätter dem till null). Så att raden har samma färg oavsett om muspekaren är över eller inte.
På NÄSTA klick skall jag sätta tillbaka onmouseover/out eventen så att raden återgår till ursprungligt skick och alternerar färg under muspekaren.
Det är på detta sista klick jag vill sätta om dem till typ:
obj.onmouseover = eval("Highlight(this)");// this = obj i detta fall
obj.onmouseout = eval("DeHighlight(this)");// this = obj i detta fall
men det funkar inte, eftersom eval-historien kör metoden direkt... inte på onmouseover/out
Som du själv har konstaterat så fungerar det inte att evaluera "this" på global nivå eftersom den då inte pekar på något html-objekt, men om du absolut vill trigga en händelse genom att sätta "onmouseX" i den globala script-koden (istället för att använda motsvarande anrop i ett html-attribut med "this" som parameter), så kan du göra så här för att få tag i det aktuella html-objektet som du körde mouseover på:
var obj = document.getElementById("myID");
obj.onmouseover = Highlight;
function Highlight(oEvent)
{
var oHTMLobjekt;
// "if mozilla":
oHTMLobjekt = oEvent.target;
// "if explorer":
oHTMLobjekt = window.event.srcElement;
// ändra oHTMLobjekt.className för att byta färger...
}
En mer tillförlitlig (crossbrowser) variant är att använda html-attribut så här:
<tr onmouseover="Highlight(this)">
function Highlight(oTR) {
// ändra oTR.className för att byta färger...
}