2012-07-04 15 views
13

estoy usando .en función() con la siguiente sintaxis:jQuery utilizar .on() con el selector no

$(".schemaTab").on("click", ".schema", function() {}) 

en lugar de .live() porque yo estoy añadiendo .schema divs dinámicamente. Esos divs tienen este código:

<div class="schema" id="SCH_16"> 
    <img src="Img/btnRemove.png" class="ikona SCH_Remove" alt="Smazat" title="Smazat"> 
</div> 

pero tengo que excluir la img de evento de clic de su div padre, por lo que cualquier idea de cómo lo hacen?

me trataron:

$(".schemaTab").not(".SCH_Remove").on("click", ".schema", function() {}) 

... pero no funcionaba y no sé cómo agregar el .not() dentro del código .on()

Respuesta

16

.no() no funcionará porque on método concede controladores de eventos para el conjunto seleccionado de elementos en el objeto jQuery y utiliza el selector de originales para probar si el evento debería aplicarse.

Así que considero que seleccionar y luego filtrar en su caso hará el truco.

API: http://api.jquery.com/on/

puede probar esto:

$(".schemaTab").on("click", ".schema", function (e) { 

    if (!$(e.target).is(".schemaTab")) { 
     // not stuff in here 
    } 

}); 
+0

'this' siempre estará vinculado al elemento que se verificó; Creo que te refieres a 'e.target'. – Ryan

+0

@minitech Ah, gracias y ++ 1 por su publicación de arriba, ¡salud! ':)' –

3

El punto de hacer esto es manejar eventos en elementos que aún no están en el DOM, que incluye su .sch_Remove.

$(".schemaTab").on("click", ".schema", function() {}) 

Con el fin de evitar que la acción de clic padres se dispare cuando se hace clic en que IMG, añada lo siguiente (además de su función anterior).

$(".schemaTab").on("click", ".SCH_Remove", function() { return false; }) 

Esto evitará que el evento 'clic' se propaguen a los padres y provocando su método onclick y prevenir el comportamiento predeterminado clic.

+0

Para que lo sepas, dado que el img es actualmente lo único en tu div, estas dos líneas de código se cancelan entre sí. Supongo que agregarás otras cosas. de lo contrario, es posible que deba reconsiderar su enfoque – nbrooks

4

Sólo asegúrese de que el destino coincide:

$('.schemaTab').on('click', '.schema', function(e) { 
    if(!$(e.target).is('.schema')) { 
     return; 
    } 

    // Do stuff 
}); 
3

Me acabo de encontrar con este problema, y ​​se utiliza la: no selecter, así:

$('.schemaTab').on('click', '.schema:not(.booga)', function(event) { 

// Diversión sucede aquí });

Estoy usando jQuery 1.11.0, no sé hasta cuándo esto funciona.

+0

esto parece responder a la pregunta –

Cuestiones relacionadas