Acest articol este adresat celor care inca mai folosesc cod JavaScript simplu (fara jQuery, Prototype, etc.). Am lucrat la un moment dat la un proiect, unde aveam nevoie sa folosesc o functie JavaScript care nu justifica includerea a 26k de jQuery.
Sunt de parere ca nu trebuie sa folosesc solutii mai complexe decat e cazul (mai ales daca asta inseamna sa adaug librarii suplimentare). Prin urmare m-am apucat batraneste de JavaScript. Functia urma sa fie chemata prin intermediul unui link si arata ceva de genul asta:
<script type="text/javascript"> function doSomething(obj) { var href = obj.getAttribute('href'); var title = obj.getAttribute('title'); // do somethig with these... } </script>
Iar apelul era de genul asta:
<a href='javascript:doSomething(this)'>Click me!</a>
Scopul era ca atunci cand apelez functia doSomething()
, sa trimit elementul <a>
ca parametru. Problema era ca de fiecare data cand inceram sa apelez getAttribute()
pe parametrul obj
, primeam o erorare care imi spunea atributul pe care-l caut nu exista.
Am folosit console.log()
pentru a inspecta elementul care ajungea in functia mea si am facut o constatare surprinzatoare: Prin this
, browser-ul intelegea sa trimita obiectul window
ca parametru la functia mea.
Cum am rezolvat problema? Am schimbat apelul functiei. Se pare ca daca folosesc atributul onclick
pentru a apela functia, browser-ul intelege ca this
este elementul curent. Asa ca am modificat apelul sa arate astfel:
<a href='#' onclick='doSomething(this)'>Click me!</a>
Din acel moment totul a mers de minune. Nu stiu sa explic exact de ce apare acest comportament, dar m-am gandit sa-l mentionez aici pentru cei care se lovesc, poate, de aceeasi problema.