2010-06-01 8 views
8

Voglio ottenere l'ID di un elemento su cui faccio clic. ho messo la funzione nell'elemento onclick, in questo modo:Ottieni l'ID dell'elemento su cui si è fatto clic nella funzione

<a id="myid" class="first active" onclick="markActiveLink();" href="#home">Home</a> 

e questo è nella funzione:

function markActiveLink() { 
    alert($(this).attr("id")); 
} 

Questo non funziona, come si dice che non è definito. Davvero dimentica l'ID, devo inserirlo nel onclick?

risposta

13

Prova: onclick="markActiveLink(this);" e

function markActiveLink(el) { 
    alert($(el).attr("id")); 
} 
+1

+1. Questo è. 'this' mantiene il suo scopo originale. Se lo definisci da qualche parte oltre all'elemento stesso, 'this' non è l'elemento. – Matchu

+0

Questo è stato fantastico. Mi hai dato la risposta di cui avevo bisogno. Tuttavia, voglio solo menzionare un punto. Dato che el è l'elemento, credo che tutto ciò che devi fare è fare alert (el.id). Provato nel 2015, il cromo funziona bene. Forse non funzionava così in passato - so che questo è un post più vecchio. Basta citare questo per aiutare i lettori attuali. – raddevus

10

perché l'utilizzo di un gestore di linea? Passa a non invadente js

$(document).ready(function(){ 
    $('#myid').bind('click', function(){ 
    alert($(this).attr('id')); 
    }); 
}); 
+1

+1. Ma questa è una soluzione migliore. – Matchu

+1

Ah, questo è un modo migliore per affrontarlo. – skerit

9

Devi passare l'elemento alla funzione. JS sé non è più intelligente di voi :)

html:

<a id="myid" class="first active" onclick="markActiveLink(this);" href="#home">Home</a> 

js:

function markActiveLink(e) { 
    alert(e.id); 
} 
0

Non utilizzare $(this) perché accidentalmente restituire l'elemento è stato aggiunto il bind. Quando fai clic su un elemento interno, restituisce anche l'elemento esterno.

<div id="outer"> 
    <div id="inner"> 

    </div> 
</div> 

È meglio utilizzare il seguente aspetto:

$("#outer").bind('click', function(e) { 

    if(e.target.id === "inner") 
    { 
     alert("you clicked the inner element"); 
    } 
    else 
    { 
     alert("you clicked the outer element"); 
    } 
}); 

È possibile trovare un violino qui: http://jsfiddle.net/vqab7jdo/1/

0

provo tutti i modi, spendono quasi 2 ore e finalmente trovato il modo migliore che ho preferiscono provarlo:

< div onclick="div_Clicked(this.id)" id="some"/>

 function div_Clicked(itemName) { alert(itemName); }
Problemi correlati