2012-02-29 9 views
14

¿Hay alguna forma en jQuery de indicar qué elemento se hizo clic en el elemento secundario si el evento onclick estaba vinculado al elemento principal?Cómo determinar si se hizo clic en el elemento secundario en Jquery

Por ejemplo:

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

y el margen de beneficio se ve así:

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

Respuesta

20

El evento alternativo que se pasa a click recibirán un event objeto como su primer argumento. El target del evento (es decir, el elemento que inició el evento) se especificará allí.

He aquí un ejemplo de la 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

¡Entendido! ¡Gracias! – Du3

+1

'event.target' será' 'o' 'si uno de esos dos elementos inició el evento de clic que burbujea hasta el manejador que ha adjuntado a '# daddy'. Use esta propiedad para determinar en qué niño se hizo clic. Voila! – FishBasketGordo

+0

Estaba usando un oyente jQuery .live y necesitaba detener la propagación al niño utilizando solo un nombre de clase. Usando el consejo anterior con uno de otra página, se me ocurrió: 'if (! $ (E.target) .hasClass (" customClass ")) return false;' y funcionó maravillosamente. ¡Gracias! – Thomas

0

probar esto por un controlador

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

Sé que esto es una opción, pero esto no es lo que estaba buscando. Quiero mantener el código heredado que es. – Du3

4

Puede utilizar el event.target para determinar lo que se ha hecho clic:

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

Aquí hay una simple example.

1

cheque esta demo cabo

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

Solo una nota de los documentos de jQuery: "A partir de jQuery 1.7,' .delegate() 'ha sido reemplazado por el método' .on() '". – FishBasketGordo

2

Ésta debe ser una perspectiva diferente, al menos:

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

uso event.target para obtener el nodo realmente hace clic:

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