Autor Zpráva
anoim
Profil *
Ahoj,
nevíte proč mi nefunguje ani jeden z těchto kódů?

window.onload = function() {
sk=$("select#skupina");
sk.change = new Function ("myFunc(sk);");
sk.change = new Function ("alert('Ahoj');");
sk.onchange = new Function ("alert('Ahoj');");
sk.onclick = new Function ("alert('Ahoj');");
};


Chci selectu přiřadit událost onchange a spustit anonymní funkci.

Dělám to podle návodu z internetu, kde je tento kód
element.onkeyup = new Function("myfnc(param1,param2,param3)");
Davex
Profil
Když už to děláš v jQuery, nemělo by to být nějak takto?
$(document).ready(function() {
  $('#skupina').bind('change', function() {
    alert('Ahoj'); 
  });
});
anoim
Profil *
Davex:

No a to je právě co nechci. Ten zápis je v Jquery dost zlouhavý a protože tam mám ještě další prvky k přiřazení, tka jsem chtěl použít tu nejkratší cestu. navíc si neodpověděl na moji otázku, proč to nejede. Chci to udělat podle toho návodu Odkaz - bod 2, ale nevím proč to nejede.

Třeba toto
sk.onchange = new Function ("alert('Ahoj');");

Při změně option v selectu by měla vyskočit hláška. Mám to syntakticky dobře?
anoim
Profil *
Aha, už je mi to jasný. Tak getElementbyId funguje, takže toto bude fungovat taky:

sk.get(0).onchange = new Function ("alert('Ahoj');"); 
Nox
Profil
anoim:
myslim že by bylo lepší

sk.onchange = function(){ alert("ahoj"); };
anoim
Profil *
Nox:
Bylo by to hezčí, ale sk.onchange nebude fungovat. sk je objekt Jquery a select je umístěn pod vlastností 0.
Taky chci předávat parametry - nebo spíše potřebuju v myFunc zjistit kterého prvku se to týká.

sk.get(0).onchange = new Function ("myFunc(sk);"); 
Nox
Profil
není to drobnost? proč teda nezměníš jen první část?

navíc nepoužívej řetězce pro kód
http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=106539#eval
anoim
Profil *
OK tak tedy použiju getElementById a výraz s anonymní funkcí, ale jak uvnitř myFunc() vrátím odkaz na objekt? Umím jenom vrátit funkci, která to volala.
Nox
Profil
Nepsal sem nic o getElement... to get(0) můžeš dát ještě do inicializace sk

Jinak co psal Davex je v podstatě stejně stejně dlouhý jako co máš ty

anoim:
ale jak uvnitř myFunc() vrátím odkaz na objekt
návratová hodnota funkce v eventu se stejně do žádné proměnné neukládá, ne? k čemu by to bylo?
anoim
Profil *
Nox:
to get(0) můžeš dát ještě do inicializace sk
No to nevím. sk používám zase jinde v kódu nejčastěji sk.val(), když tam dám get(0), tak budu muset měnit asi na sk.value ale teď nevím jestli to ještě není nějak podmíněné

návratová hodnota funkce v eventu se stejně do žádné proměnné neukládá, ne? k čemu by to bylo?
Teď nevím co myslíš, jakou návratovou hodnotu. Já používám fuctionname.caller a fuctionname.caller.type abych ověřil zda se jedná o událost, nebo o volání v rámci nějaké jiné akce. Ale zatím teda nevím jak zjistit odkaz na objekt odkud jsem vyvolal událost.
Nox
Profil
anoim:
No to nevím. sk používám zase jinde v kódu nejčastěji sk.val(), když tam dám get(0), tak budu muset měnit asi na sk.value ale teď nevím jestli to ještě není nějak podmíněné
Pak by asi bylo nejlehčí použít jQuery metod když už to používáš ( .change(function).click(function2), atd.)

Teď nevím co myslíš, jakou návratovou hodnotu. Já používám fuctionname.caller a fuctionname.caller.type abych ověřil zda se jedná o událost, nebo o volání v rámci nějaké jiné akce. Ale zatím teda nevím jak zjistit odkaz na objekt odkud jsem vyvolal událost.
To je něco dost jiného, "vrátit" znamená předat ven pomocí return

Pokud to takhle rozhoduješ podle toho jak bylo voláno, tak bych byl opatrný aby ta funkce kvůli tomu nebyla moc podivná, funkce by měla mít pokud možno velmi specifický, jednoduchý a jasný účel
anoim
Profil *
Nox:
No ale stále si mi neprozradil, jak mám předat tu informaci navazující na ten prvek s níž je událost spojená. To je pro mě nejdůležitější. To onchange jsem tam až doposud používal, ale měl jsem to uvnitř jiné funkce tas, abych zkrátil ten kód a nemusel to všude rozepisovat. Myslím .change + deklarace anonymní funkce - napsat to jen jednou do jedné funkce, kterou pak volám pro každý objekt. Tak jsem to dělal před tím.
Nox
Profil
myslíš
this
?
anoim
Profil *
This snad ukazuje na funkci.
Nox
Profil
Ne, this ukazuje na DOM objekt na kterým nastala událost
anoim
Profil *
Jo, měl si pravdu. Asi jsem si to spletl s něčím jiným. Už se mi to povedlo celé vyřešit. Použil jsem Davexovo řešení s JQ ale použil jsem odkazy na objekt. Konečné řešení je elegantní. Mám funkci, která na jedno volání přiřadí všem objektům stejnou událost + možnost předat jako argument anonymní funkci s dodatečnými příkazy, které chci vpravit do té události.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0