Autor Zpráva
Jiří Ráb
Profil
ahoj chtel jsem se vás zeptat jak je možné že mi píše pokud dám k <input type="button" value="Click me" onclick="test()"> po kliknutí na tlacitko zavolam funkci test() kde napíšu this.value a píše mi to nedefinovaná ale pokud dám onclick="test(this)" tak mi to vrátí value ?
RastyAmateur
Profil
Zeptej se sám sebe, když nedáš to “this” jako argument, na co by to mělo ukazovat? Co by jsi v tom čekal? Je to naprosto nezávislá funkce, kterou můžeš použít kdekoliv, nejen v onclick(). Co by to “this” pak signalizovalo, kdyby jsi to použil někde uprostřed js, nebo uvnitř nějaké funkce?
Jiří Ráb
Profil
ale pokud nastavím tomu button element.onclick=test; a ve funkci použiji this tak už mi to funguje i bez toho že by bylo to this uvnitř jako parametr funkce test
Keeehi
Profil
Jiří Ráb:
Protože když použiješ onclick="test()", tak je to stejné, jako kdyby jsi použil anonymní funkci.
element.onclick=function() {
    // tady this funguje
    test();
}

Tvoje element.onclick=test; je vlastně úplně to stejné. Jen jako obsluhu té události nepřiřazuješ anonymní funkci ale nějakou pojmenovanou. Proto i v ní bude this fungovat. Ekvivalentem by bylo překopírovat obsah této funkce test přímo do atributu onclick.
_es
Profil
Keeehi:
// tady this funguje
Neviem, čo presne si myslel tým „tady“, no pre kód vo funkcii test bude this objekt window.
Keeehi
Profil
_es:
Tím tady jsem myslel přímo na místě toho komentáře :) Ne až někde uvnitř funkce test.
_es
Profil
Jiří Ráb:
Môžeš si aj sám zvoliť, aké ma byť this vo volanej funkcii:
test.call(element);
či
test.call(this);
ktorým môžeš nahradiť volanie funkcie v kóde v [#4] Keeehi a „preniesť“ tak this do ďalšej funkcie. Ak sa priradí
element.onclick=test;
tak sa tiež podobne priradí this pri zavolaní funkcie po udalosti.

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