2010-12-01 31 views
11

Estoy tratando de establecer condiciones en un evento jQuery. Tengo un elemento de entrada y un div. Quiero detectar un clic en cualquier lugar de la página y ejecutar ese método, pero solo si el clic no está en la entrada o div.Excluir evento de clic según la condición?

+0

Así ¿Estás diciendo que quieres ser capaz para llamar a una función cada vez que un usuario hace clic en la página y no está en la entrada o div? –

Respuesta

12

Uso del jQuery click() o en vivo (funciones) y compruebe el destino del evento clic mediante la función de jQuery es().

  1. evento se unen clic en el documento
  2. si el objetivo no es de entrada o div continuar

.

$(document.body).click(function(e) { 
    if(!$(e.target).is("input, div")) { 
    console.log("Run function because image or div were not clicked!"); 
    } 
}); 

Ejemplo página web =>http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-document-click-exclusion.html

Ejemplo de salida firebug después de hacer clic en torno de ejemplo, la página

alt text

+1

@Mike No hay necesidad de pasarlo al nodo de documento. El elemento BODY es suficiente. –

+0

Gracias, mike, tu ejemplo funcionó muy bien :-) – tmutton

+0

@ Šime, a la derecha. Gracias. –

2

Asigne básicamente un manejador de clics al cuerpo de la página, luego pruebe el Elemento objetivo del evento para ver si el ID de ese elemento objetivo coincide con su div o su entrada.

$("body").click(function(evt) { 
    var targetElementId = evt.target.id; 

    if (!(targetElementId == "yourDivID" || targetElementId == "yourinputId")) 
    { 
    // your event code here. 
    } 
}); 
+0

usa $ (event.target) ya que está normalizado por el objeto de evento jquery. http://api.jquery.com/event.target/ –

+1

No tiene que normalizar el objeto de evento. jQuery hace eso por ti. –

+0

@Sime Vidas ... sí solo es habbit ... –

4

Algo como esto debería funcionar.

$('body').click(function(event){ // body click 
    var $target = $(event.target); // click target 
    if($target.is('#mydiv, #myinput')) { // click target is div or input 
     $target.click(); // click div or input 
    } 
}); 
2
var input = $("#yourInput")[0]; 
var div = $("#yourDiv")[0]; 

$(document.body).click(function(e) { 
    switch (e.target) { 
     case input: case div: return; 
    } 
    yourMethod(); 
}); 
1

Ejemplo para excluir elementos específicos usando un comodín:

$("#mydiv li").click(function(e){ 

     var Target = new String(e.target.id); 

     // prevent action when a element with id containing 'img_' is clicked 
     if(!Target.match(/img_/)) { 
      // do something 
     } 

}); 
Cuestiones relacionadas