Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
#1 · Zasláno: 28. 5. 2011, 22:01:38 · Upravil/a: midlan
Zdravím, mám kód typu:
$("#id input[name="+nazvy[0]+"]").keyup(function() { if(podminka_s_$(this).value_ktera_je_pokazde_jina) { objekt.metodaPrvni(0); ready[0] = false; } else { objekt.metodaDruha(0); ready[0] = true; } }); $("#id input[name="+nazvy[1]+"]").keyup(function() { if(podminka_s_$(this).value_ktera_je_pokazde_jina) { objekt.metodaPrvni(1); ready[1] = false; } else { objekt.metodaDruha(1); ready[1] = true; } }); . . . $("#id input[name="+nazvy[n]+"]").keyup(function() { if(podminka_s_$(this).value_ktera_je_pokazde_jina) { objekt.metodaPrvni(n); ready[n] = false; } else { objekt.metodaDruha(n); ready[n] = true; } }); Prostě se to furt opakuje, jen se mění to jedno číslo a poodmínka. Napadlo mě podmínky naházet do pole, ale pak zas nevím jak s tím $.keyup a $(this) :/ Napadá někoho jek to chytře zkrátit? Děkuji :) |
||
midlan Profil |
#2 · Zasláno: 28. 5. 2011, 23:44:40
Navíc by se mi hodilo kdyby se příkazy a funkce prováděné při .keyup, provedly i při .change, nevíte někdo jak to udělat abych to nemusel hloupě okopírovat? Do funkce to podle mě nepůjde dát kvůli tomu $(this), co myslíte?
|
||
Marek88 Profil |
#3 · Zasláno: 28. 5. 2011, 23:59:25 · Upravil/a: Marek88
Udělej si na to funkci:
function nazev_funkce(input, cislo, hodnota) { if(podminka_s_$(input).hodnota) { objekt.metodaPrvni(cislo); ready[cislo] = false; } else { objekt.metodaDruha(cislo); ready[cislo] = true; } } // a takhle to budeš přiřazovat $("#id input[name="+nazvy[0]+"]").keyup(function() {nazev_funkce(this, 0, value_ktera_je_pokazde_jina) }); $("#id input[name="+nazvy[1]+"]").keyup(function() {nazev_funkce(this, 1, value_ktera_je_pokazde_jina) }); ... $("#id input[name="+nazvy[n]+"]").keyup(function() {nazev_funkce(this, n, value_ktera_je_pokazde_jina) }); // podobně pro change $("#id input[name="+nazvy[0]+"]").change(function() {nazev_funkce(this, 0, value_ktera_je_pokazde_jina) }); $("#id input[name="+nazvy[1]+"]").change(function() {nazev_funkce(this, 1, value_ktera_je_pokazde_jina) }); ... $("#id input[name="+nazvy[n]+"]").change(function() {nazev_funkce(this, n, value_ktera_je_pokazde_jina) }); |
||
midlan Profil |
#4 · Zasláno: 30. 5. 2011, 10:11:18
Marek88:
jenže každý input má jinou podmínku :/ Napadlo mě uložit podmínky do pole, ale tím by se z nich stal string a zpět na boolean bych je nedostal... |
||
Chamurappi Profil |
#5 · Zasláno: 30. 5. 2011, 11:42:41
Reaguji na midlana:
Můžeš té funkci před jako argument další funkci, která bude jen vyhodnocovat podmínku. Pak by sis mohl udělat pole struktur, kde bys měl jen ty části, co se mění (čísla, řetězce, vyhodnocovací funkce), a projet ho cyklem. |
||
_es Profil |
#6 · Zasláno: 30. 5. 2011, 12:24:22 · Upravil/a: _es
Marek88:
Nejako nerozumiem tomu vyrábaniu funkcií. Prečo nie: jQueryObjekt1.keyup(nazev_funkce); jQueryObjekt2.keyup(nazev_funkce); nazev_funkce odstrániť všetky argumenty a odkazovať sa len na this ?
Inak, bez jQuery to je ešte jednoduchšie: element1.onkeyup = element2.onkeyup = nazev_funkce; |
||
midlan Profil |
#7 · Zasláno: 30. 5. 2011, 14:58:23
Tak už jsem to s těma podmínkama v podstatě vyřešil, mám je ve funkci pro ověřování, ale teď k novému problému.
Zasekl jsem se na poslední bodě optimalizace kódu: for(var j=0;j<objekty.length;j++) { $(objekty[j]).keyup(function() { overit(j, $(this).val()); }); $(objekty[j]).blur(function() { overit(j, $(this).val()); }); } pokud to udělám takhle, eventy (.blur a .keyup) se neprovádí. Když jsem místo j měl čísla a měl to objekty.lengthkrát vypsané ručně tak to šlo. |
||
joe Profil |
#8 · Zasláno: 30. 5. 2011, 15:06:27
_es:
„a z funkcie nazev_funkce odstrániť všetky argumenty a odkazovať sa len na this?“ A ty argumenty bys zadával jak? Nebo jak bys je poznal v té funkci, že se jedná o ten a ten argument? |
||
_es Profil |
#9 · Zasláno: 30. 5. 2011, 15:28:24
joe:
„A ty argumenty bys zadával jak?“ Aké argumenty? Ja som ten úvodný kód pochopil tak, že všetko si vie zistiť z objektu zdroja udalosti. |
||
midlan Profil |
#10 · Zasláno: 30. 5. 2011, 17:16:24
joe, _es:
už se nehádejte, já už to vyřešil podmínlou pro každý objekt zvlášť... Spíš mi řekněte proč toto nefunguje: midlan: > for(var j=0;j<objekty.length;j++) { > $(objekty[j]).keyup(function() { > overit(j, $(this).val()); > }); > > $(objekty[j]).blur(function() { > overit(j, $(this).val()); > }); > } |
||
_es Profil |
#11 · Zasláno: 30. 5. 2011, 17:46:27
midlan:
„Spíš mi řekněte proč toto nefunguje“ Nechce sa mi nad tým špekulovať, mám dojem, že ti stačí funkcia jedna, podobne ako tu, alebo iný spôsob, tiež len s jednou funkciou, o príspevok ďalej. |
||
Chamurappi Profil |
#12 · Zasláno: 30. 5. 2011, 19:18:36
Reaguji na midlana:
„proč toto nefunguje“ Protože ti proměnná j vyroste až do hodnoty objekty.length a při zpracování události už se nebere v úvahu hodnota z doby průchodu cyklem. Potřebuješ lexikální uzávěr.
|
||
Časová prodleva: 13 let
|
0