Autor Zpráva
radecek
Profil
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
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
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
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
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
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
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
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.

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