2012-02-29 11 views
14

C'è un modo in jQuery per dire quale bambino è stato cliccato se l'evento onclick è stato associato al genitore?Come determinare se il figlio è stato cliccato su Jquery

Per esempio:

$('#daddy').click(function() { 
    // if($("#son").isClicked()){return true;} 
    //return false; 
    }); 

e la marcatura si presenta come:

<div id="daddy"> 
    <span id="son"></span> 
    <span id="daughter"></span> 
</div> 

risposta

20

L'evento alternativa si passa a click riceveranno un event oggetto come il suo primo argomento. L'evento target (ovvero l'elemento che ha avviato l'evento) verrà specificato lì.

Ecco un esempio dalla jQuery documentation:

<!DOCTYPE html> 
<html> 
<head> 
    <style> 
span, strong, p { 
    padding: 8px; display: block; border: 1px solid #999; } 
    </style> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 

<div id="log"></div> 
<div> 
    <p> 
    <strong><span>click</span></strong> 
    </p> 
</div> 
<script> 

$("body").click(function(event) { 
    $("#log").html("clicked: " + event.target.nodeName); 
}); 

</script> 
</body> 
</html> 
+0

Trovato! Grazie! – Du3

+1

'event.target' può essere' 'o' 'se uno di questi due elementi ha avviato l'evento click che bolle al gestore che hai allegato a '# daddy'. Utilizzare questa proprietà per determinare quale figlio è stato cliccato. Ecco! – FishBasketGordo

+0

Stavo usando un listener jQuery .live e avevo bisogno di interrompere la propagazione al figlio usando solo un nome di classe. Usando il suggerimento di cui sopra con uno da un'altra pagina, ho trovato: 'if (! $ (E.target) .hasClass (" customClass ")) restituisce false;' e ha funzionato magnificamente. Grazie! – Thomas

0

Prova questo per un gestore

$('#daddy span').click(function() { 
    var clicked = $(this).attr('id'); 
    if(clicked == "son"){ 
     return true; 
    } 
    return false; 
}); 
+0

So che questo è un'opzione, ma questo non è quello che stavo cercando. Voglio mantenere il codice legacy che è. – Du3

4

È possibile utilizzare il event.target per determinare quali è stato fatto clic:

$('#daddy').click(function (e) { 
     alert(e.target.id); // The id of the clicked element 
    }); 

Ecco un simple example.

1

controllo questo demo out

$(function() { 
    $('#parent').delegate('a', 'click', function(evt) { 
     debugger; 
     evt.stopPropagation(); 
     alert($(evt.currentTarget).attr('id')); 
    }); 
});​ 
+1

Solo una nota dai documenti di jQuery: "A partire da jQuery 1.7,' .delegate() 'è stato sostituito dal metodo' .on() '." – FishBasketGordo

2

Questa dovrebbe essere una prospettiva diversa, almeno:

$('#parent').on("click", function(evt) { 
     evt.stopPropagation(); 
     if($.inArray(evt.currentTarget, $(this).children())){ 
      console.log(evt.currentTarget); 
     } 
}); 
0

uso event.target per ottenere il nodo davvero cliccato:

$('#daddy span').on('click',function(event){ 
    if(event.target.nodeName=='BUTTON'){//Was clicked a button 
     .... 
    } 
    if(event.target.id=='id'){//Was clicked #id 
     .... 
    } 
    ... 
}); 
Problemi correlati