I am trying to manually close a bootstrap popover to get it to close when I click anywhere on the document
or body
that isn't the popover.
The closest thing I have found to accomplishing this is to create a directive (found this answer) but this is for a manual trigger if a variable is true or false.
Could anyone help me figure out how to to get it to close if I click on anything that isn't the popover?
I don't mind using jQuery $(document).click(function(e){});
I just have no clue how to call a close.
<div id="new_button" popover-template="plusButtonURL" popover-placement="right" popover-append-to-body="true" popover-animation="false">+</div>
Normally popover-trigger="focus"
would do the trick, however my popover contains content that needs to be clicked on. I have an ng-click
inside my popover that get's ignored if I use the focus trigger so I am looking for a not-so-conventional way to get around that.
1) Use ng-bootstrap for Popover.
2) Update the ng-bootstrap version to 3.0.0 or above. i.e npm install --save @ng-bootstrap/ng-bootstrap@3.0.0
3) After updating, you may use [autoClose] functionality of Ngbpopover.
4) Hope it helps !
Angular boostrap ui new version 1.x having facility to out side click function. upgrade it to new version.
its work for me.
focus will not work if any submit button or click event in popover. so this useful way to do.
EDITED:
Plunker Demo
Here's how it works (the still long and exhaustive explanation):
Create a custom directive to target the trigger element:
You need to trigger the custom event handler from the element that opened the popover (in the demo this is the button). The challenge is that the popover is appended as a sibling to this element and I always think that things have greater potential to break when you are traversing the DOM and expecting it to have a specific structure. There are several ways you can target the trigger element, but my approach is to add a unique classname to the element (I choose 'trigger') when you click on it. Only one popover can be opened at a time in this scenario, so it's safe to use a classname, but you can modify to suit your preference.
Custom Directive
Applied to button
Create a custom directive for the document body (or any other element) to trigger the popover close:
The last piece is to create a custom directive that will locate the triggering element and fire the custom event to close the popover when the element it is applied to is clicked. Of course, you have to exclude the initial click event from the 'trigger' element, and any elements you want to interact with on the inside of your popover. Therefore, I added an attribute called exclude-class so you can define a class that you can add to elements whose click events should be ignored (not causing the popover to close).
To clean things up, when the event handler is triggered, we remove the trigger class that was added to the trigger element.
I added this to the body tag so that the entire page* acts as a dismissible backdrop for the popover:
And, I added the exclude class to the input in the popover:
So, there are some tweaks and gotchas, but I'll leave that to you:
Tested in Chrome, Firefox and Safari.
I had the same issue and
popover-trigger="'outsideClick'"
worked for me. Interesting that the documentation did not state this issue.Add
onclick="void(0)"
behavior to some of your background elements which when tapped will get rid of the popovers.Have a look at https://github.com/angular-ui/bootstrap/issues/2123
UPDATE: With the 1.0 release, we've added a new trigger called
outsideClick
that will automatically close the popover or tooltip when the user clicks outside the popover or tooltip.Starting with the 0.14.0 release, we've added the ability to programmatically control when your tooltip/popover is open or closed via the
tooltip-is-open
orpopover-is-open
attributes.