2010-08-29 7 views
5

Tengo el siguiente:manejador Delegado y niños interiores clic

<ul id ='foo'> 
    <li><p>hello</p></li> 
    <li><p>hello</p></li> 
    <li><p>hello</p></li> 
</ul> 

$('#foo').delegate('li', 'click', function(event) { 
    var target = $(event.target); 
    console.log(target); 
}); 

el controlador de clic se llama cada vez que uno de los p elementos interiores consigue hacer clic, así como los elementos li padres.

¿Cómo puedo obtener un puntero al elemento padre li, independientemente de qué elemento secundario interno se hizo clic? Por ejemplo, mis elementos reales li ven como:

<li> 
    <p>one</p> 
    <div> 
    <p>two</p> 
    </div> 
</li> 

así que estoy encontrando que tengo que tener varios controles para volver a la li padre que se hizo clic. ¿Hay una manera de simplemente seleccionar el padre de un tipo como:

$('#foo').delegate('li', 'click', function(event) { 
    var target = $(event.target).('li'); 
    console.log(target); // will always be parent li element itself? 
}); 

Gracias

Respuesta

2

En el controlador, this se referirá al elemento li.

$('#foo').delegate('li', 'click', function(event) { 
    var target = $(this); 
    console.log(target); // will always be parent li element itself? 
}); 
0

var target = $ (esto) debería ser de una sola manera - así es como lo hago normalmente. $ (event.target) .parents ("li") sería otro, pero podría recoger más de lo que esperaba.

+0

que debería ser 'parent',' parents' devolvería todos los 'li' si está anidando' ul's para un menú, por ejemplo. el padre devolverá solo el primero que coincida con el selector. – prodigitalson

+0

@prodigitalson - Eso no está del todo bien. El método '.parent()' de jQuery solo mira al padre inmediato. Si pasa un selector y el padre inmediato no coincide, obtiene un objeto jQuery vacío. – user113716