ugrás a tartalomhoz

addEvent + IE + this

Anonymous · 2006. Május. 14. (V), 15.34
IE alatt megoldható, hogy ha függvényt rendelek valamilyen elemhez, akkor a this változót használhassam a függvényben?

Az alábbi kód normális böngészőkben megfelelően működik, míg IE alatt undefined értéket ad.
Lehet ezen valahogyan segíteni?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
<head><title></title>
<script type="text/javascript">
<!--
function addEvent(obj, evType, fn, useCapture) {
	if (obj.addEventListener) {
		obj.addEventListener(evType,fn,useCapture);
		return true;
	} else if(obj.attachEvent){
		return obj.attachEvent("on"+evType,fn);
	} else {
		return false;
	}
}

function start() {
	var input = document.getElementById('hello');
	addEvent(input, 'focus', function() {alert(this.value);});
}
addEvent(window,'load',start);
-->
</script>
</head>
<body>
<form action="?" method="get">
	<fieldset>
		<input id="hello" value="hello" />
	</fieldset>
</form>
</body>
</html>
 
1

Jo-ho-ho

vbence · 2006. Május. 14. (V), 21.45
Hali!

Az event objektuot mindenképpen megkapja a kezelő fügvényed, amiből ki kell piszkálni az objektumot (target).
A dolgot csöppet bonyolítja, hogy explórerben több ilyen objektum is van. Pl:

<div onclick="func()">
	<img src="" alt=""/>
</div>
Itt a kezelő a div-ben van, kérdés, hogy te a képet szeretnéd megkapni, amire fizikailag a kattintás történt, vagy az objektumot, amiben van a kezelő.

Itt egy cikk, általában ez event modellekről:
http://developer.apple.com/internet/webcontent/eventmodels.html

Itt pedig egy általam írt függvény, direkt ilyen feladatokra, ha meg akarod nézni, pontosan milen is az event objektum az aktuális böngésződben:
http://vbence.web.elte.hu/dom_objektum_info.html

Bence
2

lásd komment,link a kódban

toxin · 2006. Május. 15. (H), 10.10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu">
<head><title></title>
<script type="text/javascript">
<!--
// esemény kezelő, célja hogy ugynazazon eseményre (event) több kezelőt is tudjunk akasztani, a w3c esemény-kezelő modelljével
// kapcsolatban felmerült kétejek miatt (http://www.quirksmode.org/js/events_advanced.html), forrás koncepció 
// Dave Crane 2005: eventRouter object-je , kibővítve objektumonkénti több eseménytípus támagotással,   toxin 2006  
// készült : tanulmányi, kisérleti célból, nincs túl tesztelve :) (ie6,fx1.501)

function eventRouter(el,eventType){
	this.el 								= el;
	this.eventsArray 						= new Array();
	if (!el.eventRouter) el.eventRouter 	= new Array();
	el.eventRouter[eventType] 				= this;
	el[eventType] 							= this.callback;
}

eventRouter.prototype = {
	notify : function(el,e){
		for (var i = 0;i<this.eventsArray.length;i++){
			this.eventsArray[i].call(el,e);
		}
	},
	addListener : function(listener){
		this.eventsArray[this.eventsArray.length] = listener;

	},
	callback : function(event){
		var e=event || window.event;
		var eventRouter = this.eventRouter['on'+e.type];
		if (eventRouter){
			eventRouter.notify(this,e);
		}
	}
}

function start() {
    var input = document.getElementById('hello');
    var inputBlurEventHandler = new eventRouter(input,'onblur');
    inputBlurEventHandler.addListener (function() {alert(this.value);});
}

windowOnloadEventHandler = new eventRouter(window,'onload');
windowOnloadEventHandler.addListener(start);

-->
</script>
</head>
<body>
<form action="?" method="get">
    <fieldset>
        <input id="hello" value="hello" />
    </fieldset>
</form>
</body>
</html>
ezt lécci http://www.quirksmode.org/js/events_advanced.html kukk meg, ill. használd a fenti kódot, amennyiben beválik egészséggel :)

ui: http://toxin.hu/test2.html
3

itt a megoldás

Hodicska Gergely · 2006. Május. 15. (H), 10.13
Nézd meg itt, hogy hogyan van felhasználva az addEventHandler függvény, illetve az által meghívott függvényben hogyan kerülnek kinyerésre szabványosan az eseménnyel kapcsolatos paraméterek.

Ezenkívül érdemes lehet kipróbálni a dojo JS framework eseménykezelését, konkrétan még nem használtam, de amit olvastam róla, az alpján nagyon tetszett.


Felhő