webForumDet fria alternativet

Ändra event

3 svar · 821 visningar · startad av Han-Solo

Han-SoloMedlem sedan jan. 2001290 inlägg
#1

Hej!

Jag sitter och grunnar.
Jag vill ändra eventen för olika händelser i andra händelser.

om jag t.ex. skriver

mittobject.......onmouseover = eval("Highlight");

så körs metoden Highlight vid onmouseover... allt frid och fröjd. MEN hur gör jag om jag vill passa med en parameter? (this som det är i detta fallet)

koden nedan körs på en gång... och this är felaktigt...

mittobject.......onmouseover = eval("Highlight(this)");

1. Är det nån som förstår vad jag menar?
2. Är det nån som vet hur man löser deta?

har sett nått om setEvent och createAttribute, men jag får ingen av dem att funka.

hilfe bitte!?

TomasJMedlem sedan feb. 200563 inlägg
#2

Re: Ändra event

Han-Solo skrev:

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...)

/ Tomas

Han-SoloMedlem sedan jan. 2001290 inlägg
#3

ok... nytt försök.

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

Om jag däremot kör koden nedan

obj.onmouseover = eval("Highlight");
obj.onmouseout = eval("DeHighlight");

Då inträffar händelserna som jag vill MEN min parameter saknas! Och den MÅSTE jag bifoga.

TomasJMedlem sedan feb. 200563 inlägg
#4

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...
}

Här är en länk som illustrerar lite skillnader på händelsehanteringen i olika webbläsare
http://www.faqts.com/knowledge_base/view.phtml/aid/13961/fid/145
( onmouseup , attachEvent , addEventListener )

/ Tomas

254 ms totalt · 3 externa anrop · cache AV · v20260731065814-full.56cc9887
123 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)
128 ms — hämta forumlista (db)