Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exclude click event based on condition?

I'm trying to set conditions on a jQuery event. I have an input element and a div. I want to detect a click anywhere on the page and to execute that method but only if the click is not on the input or div.

like image 726
tmutton Avatar asked Dec 01 '10 15:12

tmutton


3 Answers

Use the jQuery click() or live() functions and then check the target of the click event using the jQuery is() function.

  1. bind click event on document
  2. if the target is not input or div continue

.

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

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

Example firebug output after clicking around on example page

alt text

like image 54
Mike Grace Avatar answered Nov 08 '22 11:11

Mike Grace


Something like this should work.

$('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
    }
});
like image 4
Josiah Ruddell Avatar answered Nov 08 '22 10:11

Josiah Ruddell


Basically assign a click handler to the body of the page, then test the target Element of the event to see if the id of that target element matches your div or your input.

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

  if (!(targetElementId  == "yourDivID" || targetElementId == "yourinputId"))
  {
    // your event code here.
  }
});
like image 2
John Hartsock Avatar answered Nov 08 '22 10:11

John Hartsock