Autor Zpráva
Dero
Profil
Potřeboval bych několika elementům v dokumentu přiřadit funkci k nějaké události. Například pro všechny odkazy potřebuji přiřadit funkci, která něco udělá při najetí na odkaz. Mám tedy tento kód:

<a href="#" id="jedna">jedna</a>

<a href="#" id="dva">dva</a>

<script type="text/javascript">

o = document.getElementsByTagName('A');

for (i = 0; i < 2; i++)
o[i].onmouseover = function () { alert (i); } ;

</script>


Potřebuji však, aby při najetí na odkaz "jedna" vypsal IE číslo 0 a při najetí na "dva" vypsal 1 (což je jejich pořadí v poli "o"). V současné době to však vypíše pokaždé hodnotu 2, což je konečná hodnota po projetí for cyklu. Jak tento problém jednoduše vyřešit?

V chytrých prohlížečích to je snadné. Stačí nastavit atribut onmouseover takto: o[i].setAttribute("onmouseover", "alert("+i+");");

Díky,
-- Dero
ah01
Profil
a co takhle:

o[i].onmouseover = new Function("alert (" + i + ")");

funguje v IE6, FF1.5 a Opeře 8 - jinde jsem to nezkoušel
Chamurappi
Profil
V chytrých prohlížečích to je snadné
V Exploreru se ten atribut také nastaví. Tak, jak má. Jen se pak nevyvolává jako funkce.

Tobě však jde pouze o to, abys mohl funkci poskládat z řetězce, ne? S tím samotný JS počítá:
o[i].onmouseover = new Function("alert("+i+")");
Dero
Profil
Ano, tohle je řešení, nicméně jsem se v tomto příkladu dopustil zjednodušení.

Konkrétně potřebuji přiřadit události volání funkce. Této funkci předávám jako argumenty textové řetězce, čísla a jeden objekt. S textovými řetězci a čísly není potíž, mohu si složit funkci, která takovou funkci bude volat. Jak do toho však přimíchat onen objekt?
Chamurappi
Profil
Reaguji na ah01:
Teď vypadám jako plagiátor :-)

Reaguji na Dera:
Tak přilep referenci na tvůj objekt k dotyčnému elementu. Nějak takto:
for (i = 0; i < 2; i++)

{
tvujObjekt = new Object({"vlastnost":i})
o[i].objekt = tvujObjekt;
o[i].onmouseover = function()
{
alert(this.objekt.vlastnost)
};
}
Oswald
Profil
[příště si nejdřív přečtu otázku, než odpovim na něco jinýho]
izsak
Profil
function f(string, object)
{
...
}

...
o[i].onmouseover = new Function("f('"+ string + "', object);");

Len musis zaistit, aby premená object bola viditeľná pre daný odkaz, čiže najjednoduchšie je ju spraviť globálnou prem.
Dero
Profil
Chamurappi, izsak: Mockrát děkuju, vyřešeno.
j_hajsl
Profil
Zdravím, řeším podobný problém, ale potřebuji tu funkci přidat k již existujícímu onsubmit u formulařů, pokud tam jsou definovany

např. mám <form onsubmit="return kontrola_dat(this)"> ...

pak na konci kodu mu tedy priradim funkci (mám na stránce hafo formulaříků)
o = document.getElementsByTagName('form');
for (i = 0; i < 50; i++)
if (o[i]) o[i].onsubmit = function() { ukaz_odesilani_dat () } ;

jenže pak se mi ta původni zruší, jak to udělat, aby se přidala k již existující ....
Oswald
Profil
j_hajsl

Buď můžeš používat addEventListener, respektive attachEvent pro IE nebo na to používat nějakou takovouhle funkci:


function addListener(object, event, newListener) {
	if (object[event] instanceof Function) {
		var oldListener = object[event];
		object[event] = function () {
			oldListener.apply(this);
			newListener.apply(this);
		}
		return;
	}
	object[event] = newListener;
}
addListener(document.body, 'onclick', function(){alert('onclick1')});
addListener(document.body, 'onclick', function(){alert('onclick2')});
Toto téma je uzamčeno. Odpověď nelze zaslat.