2010-12-01 35 views
11

J'essaie de définir des conditions sur un événement jQuery. J'ai un élément d'entrée et un div. Je veux détecter un clic n'importe où sur la page et exécuter cette méthode mais seulement si le clic n'est pas sur l'entrée ou div.Exclure l'événement de clic en fonction de l'état?

+0

Alors es-tu en train de dire que tu veux pouvoir appeler une fonction chaque fois qu'un utilisateur clique sur la page et que ce n'est pas sur l'entrée ou div? –

Répondre

12

Utilisez les fonctions click jQuery() ou de vivre(), puis vérifiez la cible de l'événement clic en utilisant la fonction jQuery est().

  1. événement click se lient sur le document
  2. si la cible n'est pas entrée ou div continuer

.

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

Exemple page =>http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-document-click-exclusion.html

sortie Exemple Firebug après avoir cliqué sur autour sur exemple la page

alt text

+1

@Mike Pas besoin de l'envoyer au nœud de document. L'élément BODY est suffisant. –

+0

Merci Mike, votre exemple a bien fonctionné :-) – tmutton

+0

@ Šime, à droite. Merci. –

2

Affectez fondamentalement un gestionnaire de clic au corps de la page, puis testez l'élément cible de l'événement pour voir si l'ID de cet élément cible correspond à votre div ou à votre entrée.

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

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

utilise $ (event.target) car il est normalisé par l'objet événement jquery. http://api.jquery.com/event.target/ –

+1

Vous n'avez pas besoin de normaliser l'objet événement. jQuery le fait pour vous. –

+0

@Sime Vidas ... ouais c'est juste habbit .. –

4

Quelque chose comme ça devrait fonctionner.

$('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

Exemple d'exclure des éléments spécifiques à l'aide d'un caractère générique:

$("#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 
     } 

});