Autor Zpráva
marek187
Profil
Vyvolávam funkciu týmto spôsobom a všetko funguje ako má...

JS:
function capitaliseFirstLetter(field) {
  field.value = field.value.substr(0,1).toUpperCase() + field.value.substr(1).toLowerCase();
}

HTML:
onblur='capitaliseFirstLetter(this);'


... ak to však upravím následovne, už to nefunguje...

JS:
function capitaliseFirstLetter() {
  this.value = this.value.substr(0,1).toUpperCase() + this.value.substr(1).toLowerCase();
}

HTML:
onblur='capitaliseFirstLetter();'

... vie mi niekto vysvetliť prečo?
juriad
Profil
Protože this != field.
http://kod.djpw.cz/hbcb
marek187
Profil
juriad:
Inak povedané, tú funkciu by som musel vyvolať ešte ďalšou funkciou cez window.onload?
juriad
Profil
Je to z toho důvodu, že volání capitaliseFirstLetter() je ekvivalentní volaní window.capitaliseFirstLetter(), protože neexistuje žádný bližší nadřazený kontext.

Ale pokud bys provedl následující šílenost (nedělej to!):
<textarea onblur='this.capitaliseFirstLetter = window.capitaliseFirstLetter; this.capitaliseFirstLetter(this);'>asb</textarea>
Tak by platilo this == field
marek187
Profil
juriad:
Ďakujem pekne za detailné vysvetlenie mojej otázky, už v tom mám jasnejšie.
1Pupik1989
Profil
Ještě by byla jedna možnost jak to upravit, ale taktéž bych to moc nedoporučoval

http://kod.djpw.cz/jbcb
_es
Profil
marek187:
Najjednoduchšie je definovať udalosť v JS kóde:
objektElementu.onblur=capitaliseFirstLetter;
Vtedy bude this fungovať správne.

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: