dipende, puo' non essere facile
se per esempio il gestore evento e' nel markup non puoi,
devi necessariamente passare qualcosa
<span id="id_span" onclick="funzione(this)">click me</span>
dove
codice:
function funzione(chi){
alert(chi.id);
}
che chiaramente non cambia molto dal passare direttamente this.id
l' alternativa e' sfruttare l' oggetto event
<span id="id_span" onclick="funzione()">click me</span>
dove
codice:
function funzione(){
alert(window.event.srcElement.id);
}
ma funzionerebbe solo con explorer/opera dove l' oggetto evento si propaga automaticamente a livello di window,
in una versione crossbrowser ti serve
<span id="id_span" onclick="funzione(event)">click me</span>
dove
codice:
function funzione(e){
if(!e)e=window.event;
var src=e.target?e.target:e.srcElement;
alert(src.id);
}
e anche qui qualcosa la devi passare
se il gestore evento e' settato brutalmente via javascript
(brutalmente vuol dire che sovrascrive eventuale stesso gestore evento gia' presente per l' elemento) un this interno alla funzione si riferisce sempre all' elemento che ha richiamato la stessa
codice:
function funzione(){
alert(this.id);
}
window.onload=function(){
var el=document.getElementById('id_span');
el.onclick=funzione;
}
<span id="id_span">click me</span>
o, per sfruttare l' oggetto event, che viene automaticamente passato come primo argomento della funzione, tanto nel settaggio brutale
codice:
function funzione(e){
if(!e)e=window.event;
var src=e.target?e.target:e.srcElement;
alert(src.id);
}
window.onload=function(){
var el=document.getElementById('id_span');
el.onclick=funzione;
}
quanto in quello con addEventListener/attachEvent
codice:
function funzione(e){
if(!e)e=window.event;
var src=e.target?e.target:e.srcElement;
alert(src.id);
}
window.onload=function(){
var el=document.getElementById('id_span');
if(el.addEventListener) el.addEventListener('click', funzione, false);
else if(el.attachEvent) el.attachEvent('onclick',funzione);
}
<span id="id_span" onclick="alert('onclick precedente')">click me</span>
per ora mi fermo qui, perche' il caso che ho omesso (this in addEventListener/attachEvent) complica non poco la questione
ciao