Na co wskazuje this podany w parametrze funkcji z poziomu html?

0

Mam zewnętrzny plik z funkcjami. Załączam go w sekcji head. Następnie w sekcji body, wewnątrz innych znaczników (w tabeli) przypisuję właściwości onMouseOver funkcję z parametrem this. Czy this wskazuje na element, w którym został umiejscowiony? Bo mnie coś nie działa, a czytałem, że wskazuje na window, ale nie jestem pewien. Jak przekazać do funkcji element wewnątrz którego jest wywoływana funkcja?

0

Od takich rzeczy masz konsolę w narzędziach debuggerskich (bodajże wbudowane w Chrome, wbudowane w IE, wbudowane w Operę, pod FF masz dodatek Firebug) i polecenie console.log, od biedy zwykły alert().
Pokrótce:
this przekazany jako parametr i odebrany w funkcji jako zmienna o jakiejśtam nazwie - będzie wskazywał na obiekt, na którym używasz onmouseover (tu nie ma dużych/małych liter! to błąd!)
this (taka "niezdefiniowana zmienna") użyty wewnątrz funkcji obsługujących takie zdarzenie będzie wskazywać na window.

Dowód: http://jsbin.com/acazan/1/
(normalnie zamiast wpisywania tego w diva to własnie powinno sie to wrzucić w console.log(), ale zapewne na szybko nie będziesz wiedział jak tego użyć - doczytaj jednak o tym gdzieś)

0

Ok. Powiem o co chodzi, bo nie do końca rozumiem Twój wywód.

Mam taki kod:

var elementy = [];

function wyczyscElementyMenu(n)
{
	for (var i = elementy.length - 1; i >= n; i--)
	{
		alert(JSON.stringify(elementy));
		
		var el = document.getElementById(elementy[i])
		
		el.parentNode.removeChild(document.getElementById(el);
		elementy.pop();
	}
}

function menu(element, poziom, zawartosc) //zawartosc = [["Podmenu1_poz1", link1], ["Podmenu1_poz2", link2]]
{
	wyczyscElementyMenu(poziom);
		
	var divMenu = document.createElement('div');
	divMenu.className = "divMenu";
	divMenu.id = "div" + poziom;
	
	elementy[poziom] = divMenu.id;
	
	var text = ""
	
	for (var i = 0; i < zawartosc.length; i++)
	{
		if (zawartosc[i][1] == "string")
			text += "<a href='" + zawartosc[i][1] + ">" + zawartosc[i][0] + "</a><br>";
			
		else
			text += "<span onMouseOver='menu(" + (poziom + 1) + ", "
			+ JSON.stringify(zawartosc[i].slice(-1)) + ">" + zawartosc[i][0]
			+ "</span><br>";
	}
	
	divMenu.innerHTML = text;
	
	divMenu.offsetTop = (poziom == 0) ? (element.offsetTop + element.offsetHeight) : element.offsetTop;
	divMenu.offsetLeft = (poziom == 0) ? element.offsetLeft : (element.offsetLeft + element.offsetWidth);
	divMenu.offsetWidth = element.offsetWidth;
}

i wywołuję ten kod tutaj:

<body>
		<table align="center" border="0" cellpadding="0" cellspacing="0" style="width: 980px;">
			<tr class="logo">
				<td colspan="6" style="text-align: center;"><img src="gfx/logo.png" alt="" title="" width="800" height="227"/></td>
			</tr>
			<tr class="menu">
				<td>Duszpasterstwo Akademickie</td>
				<td onMouseOver='menu(this, 0, [["podmenu1", "http://www.google.pl/"], ["podmenu2", "http://www.wp.pl/"]])'>menu</td>

to tylko kawałek. W każdym razie, jak dodałem alert(element); w funkcji menu, to wyskoczyło undefined. Chciałbym dostać drugie w tabeli. Jak się do niego dostać?

0

Jeżeli podaje Ci to undefined to masz gdzie indziej coś mocno skopane (zmienna globalna? albo element html z atrybutem name równym element?)

Twój przykład: (z wywalonym tym, co zbędne, obrazki/treść, czy zawartość funkcji)
http://jsbin.com/ituyir/1/
(żeby była jasność - w rogu możesz kliknąć edit in jsbin i zobaczyć kod jaki tam naklepałem)

Jak widać - działa, pokazuje [object HTMLTableCellElement].
(alert nie działa w jsbin, dlatego treść wstawiłem w diva)

Aha. Jak nie zrozumiałeś tego, co napisałem - to raczej przeczytaj aż zrozumiesz, poczytaj też o narzędziach deweloperskich, bo bez tego ani rusz!

0
dzek69 napisał(a):

Aha. Jak nie zrozumiałeś tego, co napisałem - to raczej przeczytaj aż zrozumiesz

Wiesz co, jesteś chamski. Myślisz, że pozjadałeś wszystkie rozumy i możesz innych traktować z góry i bez szacunku? Twoja sprawa. Ja nie mam ochoty być tak traktowany. Dziękuję, że dostąpiłem tak wielkiej łaski, że mogłem przeczytać, co Twoje najszlachetniejsze palce napisały. Nie będę Ci już zawracać Twojej czcigodnej osoby i Twojego drogocennego czasu.

Pozdrawiam.

0

http://jsbin.com/odoqix/1/edit

Mam taką stronkę. Czemu menu nie wyświetla się we właściwym miejscu, a podmenu3 wyskakuje w ogóle gdzieś na górze?

1 użytkowników online, w tym zalogowanych: 0, gości: 1