ugrás a tartalomhoz

window.event miért undefined?

H.Z. v2 · 2011. Aug. 5. (P), 15.52
Nem értem.

function pageSetup(){
    la=document.getElementById("leftarrow");
    ra=document.getElementById("rightarrow");
    la.addEventListener("click",function(){ return move(this); },false);
    ra.addEventListener("click",function(){ return move(this); },false);

    document.getElementById("slide").innerHTML="ccccc";
}

function move(s){
    var ev=window.event;
    alert(ev);
}
A pageSetup <body onload="pageSetup()> formában indul.
Ha rákattintok a leftarrow/rightarrow id-jű div-ek valamelyikére, akkor a window.event undefined értéket ad. Már megint mit rontok el?
 
1

miben

Poetro · 2011. Aug. 5. (P), 16.17
A window.event csak Internet Explorerben létezik, egyéb esetben a callback első paramétere az esemény.
2

Kezdem egyre kevésbé érteni:

H.Z. v2 · 2011. Aug. 5. (P), 16.29
Kezdem egyre kevésbé érteni: szerintem épp te írtad korábban, hogy használjam az addEventListenert ilyen célra és ha szükségem van az esemény forrására, akkor a this-t adjam át paraméterként. Ez eddig szép és jó, de akkor mi lesz az event objektummal?
(hirtelen nem találom, melyik topikban volt szó róla, csak arra emlékszem, hogy épp azon problémáztam: eltűnik az első paraméter, ha úgy csinálom, ahogy írjátok...)
3

function move(event) { if

Poetro · 2011. Aug. 5. (P), 16.30
function move(event) {
  if (!event) event = window.event;
  // A this már be van állítva
}

la.addEventListener("click", move, false);  
4

Megvan! Itt a 27-28-29.

H.Z. v2 · 2011. Aug. 5. (P), 16.37
Megvan!
Itt a 27-28-29. hozzászólások...
Ettől kezdve nem értek semmit.
Az ottani "fv()" példát próbáltam anno zárójelek nélkül is.

update: a this nincs beállítva, pontosabban a document-re mutat, nem az eseményt kiválót elemre.
5

http://jsfiddle.net/Poetro/mp

Poetro · 2011. Aug. 5. (P), 16.45
http://jsfiddle.net/Poetro/mptDE/1/
7

Hm... mondjuk én nem

H.Z. v2 · 2011. Aug. 5. (P), 17.02
Hm... mondjuk én nem közvetlenül a függvényt írtam be az addEventListener-be, hanem egy anonim függvényből hívtam. De paraméter átadás nélkül nekem azt mondta, hogy a this, a document objektuma.

Bocs, helyesbítek: a window-é, nem a document-é.
8

Mi lenne?

Poetro · 2011. Aug. 5. (P), 17.08
Ha a függvénynek nem mondod meg, hogy mi a this, akkor nem tudja kitalálni, és visszaáll a globális névtérre, ami a böngészőben a window (nem a dokumentum). Lásd a cikkemet a témában. Az anonymous függvény tudja mi a this, elvégre az volt a callback. Ha más függvénynek is tudomására akarod ezt hozni, akkor valamilyen formában át kell adni (apply, call illetve paraméterek).

Ugyanakkor ha meg akarod magad kímélni sok fejfájástól, akkor használsz valamilyen keretrendszert, illetve mini függvénytárat.
6

HTML

Poetro · 2011. Aug. 5. (P), 16.46
Ott HTML attribútumról volt szó, ami minden egyes esetben eval segítségével értékelődik ki, de a this ott is meg van adva, csak a függvény nem kapja meg (ahogy az eseményt sem).
9

Itt egy egyszerű kód, hogy

Karvaly84 · 2011. Aug. 5. (P), 21.49
Itt egy egyszerű kód, hogy teszteld melyik böngészőn mi történik:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">

function linkHandler(argument) {
	console.log('this : ' + this);
	console.log('arguments[0] : ' + argument);
	console.log('window.event : ' + window.event);
        //debugger;
}

</script>
<title>onclick</title>
</head>
<body>
<!-- Próbálj paramétert adni a függvénynek -->
<a href="#" onclick="linkHandler()">clickHandler()</a><br>
<a href="#" onclick="alert(this.title)" title="Hoppá!">alert(this.title)</a>
</body>
</html>
Ha ki próbálod a Firefox, Explorer 9 és előtti, valamint Chrome böngészővel akkor látni fogod hogy nagy az összevisszaság.
10

Tegnap óta töröm a fejem,

H.Z. v2 · 2011. Aug. 6. (Szo), 06.36
Tegnap óta töröm a fejem, hogy honnan vettem ezt a window.event-tet, de nem tudok rájönni (elsődlegesen ugyanis FF alatt partizánkodok, IE csak akkor kezd érdekelni, ha már működik)
Na mindegy.
11

Egyébként szerintem valaki

Karvaly84 · 2011. Aug. 6. (Szo), 08.49
Egyébként szerintem valaki írhatna egy átfogó cikket a JavaScript-es esemény kezelésről és a böngészőkben való használatukról. :) Mármint ha valakinek lesz ideje, és publikálási vágya valamire. :)