Autor | Zpráva | ||
---|---|---|---|
anoim Profil * |
#1 · Zasláno: 31. 7. 2010, 20:38:08
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 |
#2 · Zasláno: 31. 7. 2010, 20:50:18
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 * |
#3 · Zasláno: 31. 7. 2010, 21:20:58
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 * |
#4 · Zasláno: 31. 7. 2010, 21:27:20
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 |
#5 · Zasláno: 31. 7. 2010, 21:27:36
anoim:
myslim že by bylo lepší sk.onchange = function(){ alert("ahoj"); }; |
||
anoim Profil * |
#6 · Zasláno: 31. 7. 2010, 21:33:15
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 |
#7 · Zasláno: 31. 7. 2010, 21:38:50 · Upravil/a: Nox
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 * |
#8 · Zasláno: 31. 7. 2010, 21:53:18
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 |
#9 · Zasláno: 31. 7. 2010, 22:01:29
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 * |
#10 · Zasláno: 31. 7. 2010, 22:08:06
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 |
#11 · Zasláno: 31. 7. 2010, 22:13:28
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 * |
#12 · Zasláno: 31. 7. 2010, 22:20:02
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 |
#13 · Zasláno: 31. 7. 2010, 22:36:07
myslíš
this |
||
anoim Profil * |
#14 · Zasláno: 31. 7. 2010, 22:56:32
This snad ukazuje na funkci.
|
||
Nox Profil |
#15 · Zasláno: 31. 7. 2010, 23:47:52
Ne, this ukazuje na DOM objekt na kterým nastala událost
|
||
anoim Profil * |
#16 · Zasláno: 1. 8. 2010, 00:23:38
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.
|
||
Časová prodleva: 14 let
|
0