-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjQuery.js
36 lines (33 loc) · 1.24 KB
/
jQuery.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$.fn.clickOut = function(eventNamespace, callback, closestElements) {
let self = this;
if (self && self.length) {
$("html").off("." + eventNamespace);
setTimeout(function() {
$("html").on("mousedown." + eventNamespace, function(event) {
// do not close element while click on custom siblings
if (closestElements && closestElements.length) {
for (var i = 0; i < closestElements.length; i++) {
if ($(event.target).closest(closestElements[i]).length) {
return;
}
}
}
if (!$(event.target).closest(self).length) {
callback();
removeClickOut();
}
})
});
self[0].addEventListener( "DOMNodeRemovedFromDocument", removeClickOut);
self.on( "hide", removeClickOut);
/**
* Remove clickOut event handlers
*/
function removeClickOut() {
self.off("hide");
self[0].removeEventListener( "DOMNodeRemovedFromDocument", removeClickOut);
$("html").off("." + eventNamespace);
};
}
return self;
}