2010-12-01 17 views
11

Ich versuche, Bedingungen für ein jQuery-Ereignis festzulegen. Ich habe ein Eingabeelement und ein div. Ich möchte einen Klick irgendwo auf der Seite erkennen und diese Methode ausführen, aber nur wenn der Klick nicht auf der Eingabe oder div ist.Click-Ereignis basierend auf Bedingung ausschließen?

+0

So Sagst du, du willst es können? um eine Funktion immer dann aufzurufen, wenn ein Benutzer auf die Seite klickt und sie nicht auf der Eingabe oder div steht? –

Antwort

12

Verwenden Sie die jQuery click() oder leben() Funktionen und überprüfen dann das Ziel des Click-Ereignis mit der jQuery ist() Funktion.

  1. binden Click-Ereignis auf dem Dokument
  2. , wenn das Ziel nicht eingegeben wird oder div weiter

.

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

Beispiel die Homepage =>http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-document-click-exclusion.html

Beispiel firebug Ausgang nach dem Einschalten Beispiel Seite klicken um

alt text

+1

@Mike Keine Notwendigkeit, es auf den Dokument-Knoten zu sprudeln. Das BODY-Element ist genug. –

+0

Danke Mike, dein Beispiel hat super funktioniert :-) – tmutton

+0

@ Šime, richtig. Vielen Dank. –

2

Weisen Sie dem Body der Seite grundsätzlich einen Click-Handler zu und testen Sie dann das Zielelement des Events, um zu sehen, ob die ID dieses Zielelements mit Ihrem div oder Ihrer Eingabe übereinstimmt.

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

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

Verwenden Sie $ (event.target), da es durch das jquery-Ereignisobjekt normalisiert wird. http://api.jquery.com/event.target/ –

+1

Sie müssen das Ereignisobjekt nicht normalisieren. jQuery macht das für dich. –

+0

@Sime Vidas ... ja, es ist nur habbit .. –

4

So etwas sollte funktionieren.

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

Beispiel ausschließen bestimmte Elemente einen Platzhalter verwenden:

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

}); 
Verwandte Themen