'Calling a function on Bootstrap modal open
I used to use jQuery UI's dialog, and it had the open option, where you can specify some Javascript code to execute once the dialog is opened. I would have used that option to select the text within the dialog using a function I have.
Now I want to do that using bootstrap's modal. Below is the HTMl code:
<div id="code" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
<pre>
print 'Hello World'
And as for the button that opens the modal:
<a href="#code" data-toggle="modal" class="btn code-dialog">Display code</a>
I tried to use an onclick listener of the button, but the alert message was displayed before the modal appeared:
$( ".code-dialog" ).click(function(){
alert("I want this to appear after the modal has opened!");
});
Solution 1:[1]
You can use the shown event/show event based on what you need:
$( "#code" ).on('shown', function(){
alert("I want this to appear after the modal has opened!");
});
Demo: Plunker
Update for Bootstrap 3.0
For Bootstrap 3.0 you can still use the shown event but you would use it like this:
$('#code').on('shown.bs.modal', function (e) {
// do something...
})
See the Bootstrap 3.0 docs here under "Events".
Solution 2:[2]
will not work.. use $(window) instead
For Showing
$(window).on('shown.bs.modal', function() {
$('#code').modal('show');
alert('shown');
});
For Hiding
$(window).on('hidden.bs.modal', function() {
$('#code').modal('hide');
alert('hidden');
});
Solution 3:[3]
you can use show instead of shown for making the function to load just before modal open, instead of after modal open.
$('#code').on('show.bs.modal', function (e) {
// do something...
})
Solution 4:[4]
Bootstrap modal exposes events. Listen for the the shown event like this
$('#my-modal').on('shown', function(){
// code here
});
Solution 5:[5]
if somebody still has a problem the only thing working perfectly for me by useing (loaded.bs.modal) :
$('#editModal').on('loaded.bs.modal', function () {
console.log('edit modal loaded');
$('.datepicker').datepicker({
dateFormat: 'yy-mm-dd',
clearBtn: true,
rtl: false,
todayHighlight: true,
toggleActive: true,
changeYear: true,
changeMonth: true
});
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Community |
| Solution 2 | William Miller |
| Solution 3 | Atchyut Nagabhairava |
| Solution 4 | Josnidhin |
| Solution 5 | Erose |
