Autor | Zpráva | ||
---|---|---|---|
radecek Profil |
#1 · Zasláno: 28. 5. 2009, 15:16:19 · Upravil/a: radecek
Ahoj,
potrebuju udelat na webu script, ktery prida ke kazdemu formularovemu policku vlastnost ze pri jeho aktivaci treba zmeni barvu na cervenou. Problem je ten ze tato akce plati pro focus kazdeho inputu na strance (ktery je v form), ale zmeni se pouze posledni, protoze i se stale navysuje o jednicku. Nevite prosim jak udelat aby se mi vlasnost pridala na prvek, ktery je zrovna aktivni? Priklad je jednoduchy a radsi bych volal na onfocus nejakou funkci, konkretne toto na webu nepotrebuju ale princip je stejny :) var forms = document.getElementsByTagName("form"); for(var x = 0; x < forms.length; x++){ var inputs = forms[x].getElementsByTagName("input"); for(var i = 0; i < input.length; i++){ inputs[i].onfocus = function (){ inputs[i].style.color = "red"; } } } |
||
AM_ Profil |
#2 · Zasláno: 28. 5. 2009, 15:23:53
Máš tam chyby:
var forms = document.getElementsByTagName("form"); for(var x = 0; x < forms.length; x++){ var inputs = forms[x].getElementsByTagName("input"); for(var i = 0; i < inputs.length; i++){//chyba inputs[i].onfocus = function (){ //chyba this.style.color = "red"; //takhle by to mohlo fungovat. } } } Pokud bz to takhle nešlo, obsah for cyklu ještě zkus nahradit: inputs[i].setAttribute('onfocus', 'this.style.color = "red"'); |
||
Chamurappi Profil |
#3 · Zasláno: 28. 5. 2009, 15:27:37
Reaguji na AM_:
„obsah for cyklu ještě zkus nahradit“ Fuj. Jednak je prasárna strkat vykonávaný kód do řetězce, jednak to nebude spolehlivě fungovat, používání setAttribute je obecně docela špatný nápad. |
||
AM_ Profil |
#4 · Zasláno: 28. 5. 2009, 15:33:07
Chamurappi
stejně by měla fungovat ta první varianta, tohle jsem psal jako druhou alternativu - proto taky jako druhou, protože to nebude fungovat spíš. jestli to nejde v IE tak jednoznačně tedy ta první. |
||
radecek Profil |
#5 · Zasláno: 28. 5. 2009, 15:34:56
this funguje. Diky :)
Na konci ciklu je jeste tento kod: forms[x].onsubmit = function (){ fadeOut(table, 100, 20); return false; } Ten me ten se taky prepisuje a zmena se provadi az u posledniho formulare. Vzdycky s timto mam problem v Js nevite jak to obejit? |
||
AM_ Profil |
#6 · Zasláno: 28. 5. 2009, 19:09:23
radecek
tady problém být evidentně nemůže, protože funkce přiřazená onsubmit je vždycky stejná (není v ní nic pofidérního jako objekt existující jen v tom kontextu, ve kterém funkci vytváříš, jako to bylo předtím). Chyba je zřejmě jinde (kde se bere objekt "table"?) |
||
radecek Profil |
#7 · Zasláno: 28. 5. 2009, 19:46:48
Objek table se vytvari z tohoto najde to vnitrni tabulku v tagu form:
for(var x = 0; x < forms.length; x++){ var table = forms[x].getElementsByTagName("table"); |
||
Chamurappi Profil |
#8 · Zasláno: 28. 5. 2009, 19:50:40
Reaguji na radecka:
„najde to vnitrni tabulku v tagu form“ Vnitřní tabulky. Jestli chceš první tabulku, tak ta bude v table[0]. Budeš-li mít se skriptem nějaký další problém, vlož místo nejasného úryvku kódu odkaz na živou ukázku. |
||
Časová prodleva: 15 let
|
0